@idiosync/react-observable
Version:
State management control layer for React projects
19 lines (18 loc) • 1 kB
TypeScript
import { Duckservable, Observable } from '../types/observable';
import { Store } from '../types/store';
export declare const getStoreObservable: <T>(callback: (store: Store) => Observable<T>) => Observable<T>;
/**
* Merges multiple store objects using spread syntax.
* Later objects take precedence over earlier ones.
* Throws an error if any input is not an object.
*/
type DeepMerge<T, U> = {
[K in keyof T | keyof U]: K extends keyof T ? K extends keyof U ? T[K] extends Record<string, any> ? U[K] extends Record<string, any> ? DeepMerge<T[K], U[K]> : U[K] : U[K] : T[K] : K extends keyof U ? U[K] : never;
};
type DeepMergeAll<T extends readonly any[]> = T extends readonly [
infer First,
...infer Rest
] ? Rest extends readonly any[] ? DeepMerge<First, DeepMergeAll<Rest>> : First : {};
type StoreObject = Record<string, Record<string, Duckservable>>;
export declare const mergeStoreObjects: <const S extends readonly StoreObject[]>(...storeObjects: S) => DeepMergeAll<S>;
export {};