clean-architecture
Version:
Utilities for implementing clean architecture using Redux
21 lines (20 loc) • 660 B
TypeScript
import "minimal-polyfills/Object.fromEntries";
export type UsecaseLike = {
name: string;
selectors?: {
[Name in string]: (state: any) => unknown;
};
};
export type CoreStates<Usecase extends UsecaseLike> = {
[U in Usecase as U["name"]]: U["selectors"] extends infer Selectors ? {
[K in keyof Selectors as `get${Capitalize<string & K>}`]: () => Selectors[K] extends (state: any) => infer R ? R : never;
} : never;
};
export declare function usecasesToStates<Usecase extends UsecaseLike>(params: {
usecasesArr: readonly Usecase[];
store: {
getState: () => any;
};
}): {
states: CoreStates<Usecase>;
};