lib0
Version:
isomorphic utility functions
31 lines • 1.67 kB
TypeScript
export type TypeIsAny<T, Then, Else> = 0 extends (1 & T) ? Then : Else;
/**
* Resolve a type with all sub-properties. Useful for returning prettified results.
*/
export type Prettify<T, Depth extends number = 10, Cache extends any[] = []> = Cache["length"] extends Depth ? T : T extends object ? { [K in keyof T]: Prettify<T[K], Depth, [any, ...Cache]>; } & {} : T;
export type Assert<C extends true> = C;
export type Equal<A, B> = (<T>() => T extends A ? 1 : 2) extends (<T>() => T extends B ? 1 : 2) ? true : false;
export type AssertExtends<A extends B, B> = A;
/**
* In typescript `keyof {[k:string]:any}` is `string|number` instead of `string`. This KeyOf type returns the expected
* result. Use this for pretty-printing onyly.
*/
export type KeyOf<Obj extends {
[K: string | number | symbol]: any;
}> = { [K in keyof Obj]: K; }[keyof Obj];
/**
* For each key-value pair in Renames, rename O[Key] to O[Renames[Key]]
*/
export type PropsRename<OBJ extends { [K in string | number]: any; }, Renames extends {
[K: string | number]: string | number;
}> = { [K in keyof OBJ as K extends keyof Renames ? Renames[K] : K extends Renames[keyof Renames] ? never : K]: OBJ[K]; };
/**
* Convert a union type to an intersection type.
*/
export type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never;
/**
* Merge two objects, keeping only keys present in both with intersected value types.
* e.g. IntersectObjects<{a:string,b:string|number},{b:string,c:number}> = {b:string}
*/
export type PropsPickShared<A, B> = { [K in keyof A & keyof B]: Extract<B[K], A[K]>; } & {};
//# sourceMappingURL=ts.d.ts.map