UNPKG

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
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 {};