@holgerengels/compute-engine
Version:
Symbolic computing and numeric evaluations for JavaScript and Node.js
10 lines (9 loc) • 473 B
TypeScript
/* 0.26.0-alpha2 */
type MergeTypes<TypesArray extends any[], Res = {}> = TypesArray extends [
infer Head,
...infer Rem
] ? MergeTypes<Rem, Res & Head> : Res;
export type OneOf<TypesArray extends any[], Res = never, AllProperties = MergeTypes<TypesArray>> = TypesArray extends [infer Head, ...infer Rem] ? OneOf<Rem, Res | OnlyFirst<Head, AllProperties>, AllProperties> : Res;
type OnlyFirst<F, S> = F & {
[Key in keyof Omit<S, keyof F>]?: never;
};
export {};