@a-latte/vue2-helpers
Version:
A util package to use Vue 2 with Composition API easily
26 lines (25 loc) • 1.63 kB
TypeScript
import { ComputedRef } from 'vue';
declare type ActionReturnType<T extends (...args: any) => any> = Promise<T extends (...args: any) => Promise<infer U> ? U : ReturnType<T>>;
interface ResultMap<T> {
state: ComputedRef<T>;
getters: ComputedRef<T extends (...args: any) => infer U ? U : never>;
mutations: T extends (a: any) => any ? () => void : T extends (a: any, b: infer U) => any ? (payload: U) => void : never;
actions: T extends (a: any) => any ? () => ActionReturnType<T> : T extends (a: any, b: infer U) => any ? (payload: U) => ActionReturnType<T> : never;
}
declare type ResultMapKey = keyof ResultMap<any>;
declare type HelperReturnType<RMK extends ResultMapKey, K extends string, Type> = {
[key in K]: ResultMap<key extends keyof Type ? Type[key] : never>[RMK];
};
interface Helper<RMK extends ResultMapKey, RootType> {
<K extends string>(keys: K[]): HelperReturnType<RMK, K, RootType>;
<K extends string, N extends string>(namespace: N, keys: K[]): HelperReturnType<RMK, K, N extends keyof RootType ? RootType[N] : {}>;
<K extends string>(map: Record<K, string | Function>): HelperReturnType<RMK, K, RootType>;
<K extends string, N extends string>(namespace: N, map: Record<K, string | Function>): HelperReturnType<RMK, K, N extends keyof RootType ? RootType[N] : {}>;
}
export declare function createVuexHelpers<RootState, RootGetters, RootMutations, RootActions>(): {
useState: Helper<"state", RootState>;
useGetters: Helper<"getters", RootGetters>;
useMutations: Helper<"mutations", RootMutations>;
useActions: Helper<"actions", RootActions>;
};
export {};