vuex-smart-module
Version:
Type safe Vuex module with powerful module features
44 lines (43 loc) • 2.17 kB
TypeScript
import { ContextPosition, Commit, Dispatch } from './context';
import { Module } from './module';
import { BG, BM, BA, Payload } from './assets';
export declare type MappedFunction<Fn, R> = undefined extends Payload<Fn> ? (payload?: Payload<Fn>) => R : (payload: Payload<Fn>) => R;
export declare type RestArgs<Fn> = Fn extends (_: any, ...args: infer R) => any ? R : never;
export declare function createMapper<S, G extends BG<S>, M extends BM<S>, A extends BA<S, G, M>>(module: Module<S, G, M, A, any>): ComponentMapper<S, G, M, A>;
export declare class ComponentMapper<S, G extends BG<S>, M extends BM<S>, A extends BA<S, G, M>> {
private pos;
constructor(pos: ContextPosition);
mapState<K extends keyof S>(map: K[]): {
[Key in K]: () => S[Key];
};
mapState<T extends Record<string, keyof S>>(map: T): {
[Key in keyof T]: () => S[T[Key] & keyof S];
};
mapState<T extends Record<string, (state: S, getters: G) => any>>(map: T): {
[Key in keyof T]: () => ReturnType<T[Key]>;
};
mapGetters<K extends keyof G>(map: K[]): {
[Key in K]: () => G[Key];
};
mapGetters<T extends Record<string, keyof G>>(map: T): {
[Key in keyof T]: () => G[T[Key] & keyof G];
};
mapMutations<K extends keyof M>(map: K[]): {
[Key in K]: MappedFunction<M[Key], void>;
};
mapMutations<T extends Record<string, keyof M>>(map: T): {
[Key in keyof T]: MappedFunction<M[T[Key] & keyof M], void>;
};
mapMutations<T extends Record<string, (commit: Commit<M>, ...args: any[]) => any>>(map: T): {
[Key in keyof T]: (...args: RestArgs<T[Key]>) => ReturnType<T[Key]>;
};
mapActions<K extends keyof A>(map: K[]): {
[Key in K]: MappedFunction<A[Key], Promise<unknown>>;
};
mapActions<T extends Record<string, keyof A>>(map: T): {
[Key in keyof T]: MappedFunction<A[T[Key] & keyof A], Promise<unknown>>;
};
mapActions<T extends Record<string, (dispatch: Dispatch<A>, ...args: any[]) => any>>(map: T): {
[Key in keyof T]: (...args: RestArgs<T[Key]>) => ReturnType<T[Key]>;
};
}