-import type { ComponentPublicInstance } from 'vue-demi'
+import type { ComponentPublicInstance, ComputedRef } from 'vue-demi'
import type {
_GettersTree,
_Method,
*/
export type _MapStateReturn<
S extends StateTree,
- G extends _GettersTree<S>,
+ G extends _GettersTree<S> | { [key: string]: ComputedRef },
Keys extends keyof S | keyof G = keyof S | keyof G,
> = {
// [key in keyof S | keyof G]: () => key extends keyof S
export type _MapStateObjectReturn<
Id extends string,
S extends StateTree,
- G extends _GettersTree<S>,
+ G extends _GettersTree<S> | { [key: string]: ComputedRef },
A,
T extends Record<
string,
export function mapState<
Id extends string,
S extends StateTree,
- G extends _GettersTree<S>,
+ G extends _GettersTree<S> | { [key: string]: ComputedRef },
A,
KeyMapper extends Record<
string,
export function mapState<
Id extends string,
S extends StateTree,
- G extends _GettersTree<S>,
+ G extends _GettersTree<S> | { [key: string]: ComputedRef },
A,
Keys extends keyof S | keyof G,
>(
export function mapState<
Id extends string,
S extends StateTree,
- G extends _GettersTree<S>,
+ G extends _GettersTree<S> | { [key: string]: ComputedRef },
A,
>(
useStore: StoreDefinition<Id, S, G, A>,
+import { computed, ref } from 'vue'
import {
defineStore,
expectType,
mapActions,
mapState,
mapWritableState,
+ TypeEqual,
} from './'
-const useStore = defineStore({
+const useOptionsStore = defineStore({
id: 'name',
state: () => ({ a: 'on' as 'on' | 'off', nested: { counter: 0 } }),
getters: {
},
})
+const useSetupStore = defineStore('setupStore', () => {
+ const a = ref('on' as 'on' | 'off')
+ const upper = computed(() => a.value.toUpperCase())
+ function toggleA() {
+ a.value = a.value === 'off' ? 'on' : 'off'
+ }
+ function setToggle(aVal: 'on' | 'off') {
+ return (a.value = aVal)
+ }
+ return { a, upper, toggleA, setToggle }
+})
+
const useCounter = defineStore({
id: 'counter',
state: () => ({ n: 0 }),
state: () => ({}),
})
-type MainStore = ReturnType<typeof useStore>
+type MainStore = ReturnType<typeof useOptionsStore>
type DosStore = ReturnType<typeof useStoreDos>
type CounterStore = ReturnType<typeof useCounter>
-const computedStores = mapStores(useStore, useStoreDos, useCounter)
+const computedStores = mapStores(useOptionsStore, useStoreDos, useCounter)
expectType<{
nameStore: () => MainStore
expectType<{
a: () => 'on' | 'off'
upper: () => string
-}>(mapState(useStore, ['a', 'upper']))
+}>(mapState(useOptionsStore, ['a', 'upper']))
// @ts-expect-error
-mapState(useStore, ['a']).nested
+mapState(useOptionsStore, ['a']).nested
// @ts-expect-error
-mapState(useStore, ['a', 'upper']).nested
+mapState(useOptionsStore, ['a', 'upper']).nested
expectType<{
newA: () => 'on' | 'off'
newUpper: () => string
-}>(mapState(useStore, { newA: 'a', newUpper: 'upper' }))
+}>(mapState(useOptionsStore, { newA: 'a', newUpper: 'upper' }))
expectType<{
newA: () => 'on' | 'off'
newUpper: () => string
}>(
- mapState(useStore, {
+ mapState(useOptionsStore, {
newA: (store) => {
expectType<string>(store.upper)
return store.a
expectType<{
setToggle: (a: 'on' | 'off') => 'on' | 'off'
toggleA: () => void
-}>(mapActions(useStore, ['setToggle', 'toggleA']))
+}>(mapActions(useOptionsStore, ['setToggle', 'toggleA']))
expectType<{
newSetToggle: (a: 'on' | 'off') => 'on' | 'off'
newToggleA: () => void
-}>(mapActions(useStore, { newSetToggle: 'setToggle', newToggleA: 'toggleA' }))
+}>(
+ mapActions(useOptionsStore, {
+ newSetToggle: 'setToggle',
+ newToggleA: 'toggleA',
+ })
+)
expectType<{
a: {
get: () => 'on' | 'off'
set: (v: 'on' | 'off') => any
}
-}>(mapWritableState(useStore, ['a']))
+}>(mapWritableState(useOptionsStore, ['a']))
// @ts-expect-error: only defined in array
mapWritableState(useStore, ['a']).b
get: () => 'on' | 'off'
set: (v: 'on' | 'off') => any
}
-}>(mapWritableState(useStore, { newA: 'a' }))
+}>(mapWritableState(useOptionsStore, { newA: 'a' }))
// @ts-expect-error: cannot use a getter
mapWritableState(useStore, ['upper'])
// @ts-expect-error: cannot use a getter
mapWritableState(useStore, { up: 'upper' })
+
+const setupStoreWithState = mapState(useSetupStore, ['a'])
+
+// store with no getters
+expectType<
+ TypeEqual<
+ {
+ a: () => 'on' | 'off'
+ },
+ typeof setupStoreWithState
+ >
+>(true)
+
+const setupStoreWithGetters = mapState(useSetupStore, ['a', 'upper'])
+
+expectType<
+ TypeEqual<
+ {
+ a: () => 'on' | 'off'
+ upper: () => string
+ },
+ typeof setupStoreWithGetters
+ >
+>(true)