patronum
Version:
☄️ Effector utility library delivering modularity and convenience
19 lines (18 loc) • 1.02 kB
TypeScript
import { Effect, Event, EventAsReturnType, Store, Unit, UnitTargetable } from 'effector';
type Tuple<T = unknown> = [T] | T[];
type Shape = Record<string, unknown> | Tuple;
type Events<Result> = {
[Key in keyof Result]: Event<Result[Key]>;
};
type ReturnTarget<Result, Target> = Target extends Store<infer S> ? S extends Result ? Store<S> : Store<Result> : Target extends Event<infer P> ? P extends Result ? Event<P> : Event<Result> : Target extends Effect<infer P, infer D, infer F> ? P extends Result ? Effect<P, D, F> : Effect<Result, D, F> : Unit<Result>;
export declare function combineEvents<P extends Shape>(config: {
events: Events<P>;
reset?: Unit<any>;
}): EventAsReturnType<P>;
export declare function combineEvents<P extends Shape, T extends UnitTargetable<P extends Tuple ? P : Partial<P>>>(config: {
events: Events<P>;
target: T;
reset?: Unit<any>;
}): ReturnTarget<P, T>;
export declare function combineEvents<P extends Shape>(events: Events<P>): EventAsReturnType<P>;
export {};