export type Nullable = T | null; export type IsNullable = [null] extends [T] ? true : false; export type RequiredByKey = Omit & Required>; export type NoInfer = [T][T extends any ? 0 : never]; type Narrowable = string | number | bigint | boolean; type NarrowRaw = (A extends [] ? [] : never) | (A extends Narrowable ? A : never) | { [K in keyof A]: A[K] extends Function ? A[K] : NarrowRaw; }; export type Narrow = Try>; export type Try = A1 extends A2 ? A1 : Catch; export type Pretty = { [K in keyof T]: T[K]; } & {}; export type ComputeRange = Result["length"] extends N ? Result : ComputeRange; export type Index40 = ComputeRange<40>[number]; export {};