bridgets
Version:
<p align="center"> <a href="https://bridgets.co"> <img src="http://bridgets.co/assets/logo-short.svg" height="48" /> <h1 align="center">BridgeTS</h1> </a> </p>
42 lines • 989 B
TypeScript
declare type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
declare type Indexify<T> = T & {
[str: string]: undefined;
};
declare type UndefinedVals<T> = {
[K in keyof T]: undefined;
};
declare type AllUnionKeys<T> = keyof UnionToIntersection<UndefinedVals<T>>;
declare type AllFields<T> = {
[K in AllUnionKeys<T> & string]: Indexify<T>[K];
};
declare type A = {
a: 'foo';
b: string;
c: number;
};
declare type B = {
a: 'bar';
b: boolean;
};
declare type Union = A | B;
declare type Result = AllFields<Union>;
/**
* 🥳
* type Result = {
* a: "foo" | "bar";
* b: string | boolean;
* c: number | undefined;
* }
*/
declare type Test = {
error: {
t: 8;
};
} | {
t: 3;
};
declare type NoUndefinedField<T> = {
[P in keyof T]-?: NoUndefinedField<NonNullable<T[P]>>;
};
declare let v: NoUndefinedField<Omit<AllFields<Test>, 't'>>;
//# sourceMappingURL=test.d.ts.map