composed(): string {
return this.upperCaseName + ': ok'
},
+ arrowUpper: (state) => {
+ // @ts-expect-error
+ state.nope
+ state.name.toUpperCase()
+ },
+ },
+ actions: {
+ o() {
+ // @ts-expect-error it should type getters
+ this.arrowUper.toUpperCase()
+ this.o().toUpperCase()
+ return 'a string'
+ },
},
})()
}
it('adds getters to the store', () => {
const store = useStore()
expect(store.upperCaseName).toBe('EDUARDO')
+
+ // @ts-expect-error
+ store.nope
+
store.name = 'Ed'
expect(store.upperCaseName).toBe('ED')
})
const useStore = defineStore({
id: 'test',
+ state: () => ({ n: 0 }),
+
actions: {
incrementN() {
return this.n++
export function defineStore<
Id extends string,
S extends StateTree,
- // the omission of the extends is necessary for type inference
G extends GettersTree<S>,
- A /* extends Record<string, Method> */
+ A /* extends Record<string, StoreAction> */
>(options: DefineStoreOptions<Id, S, G, A>): StoreDefinition<Id, S, G, A> {
const { id, state, getters, actions } = options
)
}
-/**
- * Store Getter
- * @internal
- */
-export interface StoreGetter<S extends StateTree, T = any> {
- (state: S, getters: Record<string, Ref<any>>): T
-}
-
export type DeepPartial<T> = { [K in keyof T]?: DeepPartial<T[K]> }
// type DeepReadonly<T> = { readonly [P in keyof T]: DeepReadonly<T[P]> }
* @internal
*/
export type StoreWithGetters<G> = {
- readonly [k in keyof G]: G[k] extends (
- this: infer This,
- store?: any
- ) => infer R
- ? R
- : never
+ readonly [k in keyof G]: G[k] extends (...args: any[]) => infer R ? R : never
}
// // in this type we forget about this because otherwise the type is recursive
expectType<string>(this.upper)
return false
},
+
+ doubleCounter: (state) => {
+ expectType<number>(state.nested.counter)
+ return state.nested.counter * 2
+ },
},
actions: {
doStuff() {