export type Id = { [K in keyof T]: T[K] } & {} export type WithRequiredProp = Omit & Required> export type Override = T2 extends any ? Omit & T2 : never export function assertCast(v: any): asserts v is T {} export function safeAssign( target: T, ...args: Array>> ): T { return Object.assign(target, ...args) } /** * Convert a Union type `(A|B)` to an intersection type `(A&B)` */ export type UnionToIntersection = ( U extends any ? (k: U) => void : never ) extends (k: infer I) => void ? I : never export type NonOptionalKeys = { [K in keyof T]-?: undefined extends T[K] ? never : K }[keyof T] export type HasRequiredProps = NonOptionalKeys extends never ? False : True export type OptionalIfAllPropsOptional = HasRequiredProps export type NoInfer = [T][T extends any ? 0 : never] export type NonUndefined = T extends undefined ? never : T export type UnwrapPromise = T extends PromiseLike ? V : T export type MaybePromise = T | PromiseLike export type OmitFromUnion = T extends any ? Omit : never export type IsAny = true | false extends ( T extends never ? true : false ) ? True : False export type CastAny = IsAny