UNPKG

lib0

Version:

isomorphic utility functions

31 lines • 1.67 kB
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