/// declare function assert(condition: unknown, message?: string): asserts condition; declare function assertUnreachable(_: never): void; declare function assertUnreachableThrowException(_: never): never; type Mutable = { -readonly [k in keyof T]: T[k]; }; type DeepMutable = { -readonly [k in keyof T]: DeepMutable; }; type DeepPartial = T extends any[] ? T : T extends Record ? { [P in keyof T]?: DeepPartial; } : T; type MethodSignature any> = (...arguments_: Parameters) => ReturnType; type Optional = T | null | undefined; /** * When given a union of objects, extracts all the keys of the union. * * "keyof ({a: string} | {b: string})" returns the never type. */ type DistributiveKeyOf = T extends object ? keyof T : never; type Prettify = { [K in keyof T]: T[K] extends Record ? Prettify : T[K]; } & {}; export { type DeepMutable, type DeepPartial, type DistributiveKeyOf, type MethodSignature, type Mutable, type Optional, type Prettify, assert, assertUnreachable, assertUnreachableThrowException };