easy-peasy-classes
Version:
easy-peasy enhanced with classes, full typescript type safety, nested store stuctures and model inheritance
21 lines (20 loc) • 1.41 kB
TypeScript
import { Action, Thunk } from 'easy-peasy';
import { ModelBasePure } from './base-class';
export declare type ComputedType<T> = T & {
computed?: undefined;
};
export declare type ToStoreType<T extends object> = {
[P in keyof T]: 'computed' extends keyof T[P] ? T[P] extends ComputedType<infer U> ? U : T[P] : T[P] extends (...args: any[]) => any ? ReturnType<T[P]> extends void ? Action<T, Parameters<T[P]>[0] extends undefined ? void : Parameters<T[P]>[0]> & Function : Thunk<T, Parameters<T[P]>[0], void, {}, ReturnType<T[P]>> & Function : T[P] extends ModelBasePure ? ToStoreType<T[P]> : T[P];
};
declare type FilterFlagsRemove<Base, Condition> = {
[Key in keyof Base]: Base[Key] extends Condition ? never : Key;
};
declare type AllowedNamesRemove<Base, Condition> = FilterFlagsRemove<Base, Condition>[keyof Base];
declare type SubTypeRemove<Base, Condition> = Pick<Base, AllowedNamesRemove<Base, Condition>>;
declare type StateOnly1<T extends object> = SubTypeRemove<T, Function>;
export declare type StateOnlyRecursive<T extends object> = {
[P in keyof StateOnly1<T>]: T[P] extends object ? StateOnlyRecursive<T[P]> : T[P];
};
export declare type UnpackToStoreType<Result> = Result extends ToStoreType<infer R> ? R : Result;
export declare type UnpackStateOnlyRecursive<T> = T extends ToStoreType<infer R> ? R : T extends StateOnlyRecursive<infer U> ? U : T;
export {};