import type { NonEmptyArray } from '../NonEmptyArray' export type Primitive = string | number | boolean | null | symbol export type Constructor = { new (...args: any[]): A } export type _A = [T] extends [{ ['_A']: () => infer A }] ? A : never export type _R = [T] extends [{ ['_R']: (_: infer R) => void }] ? R : never export type _E = [T] extends [{ ['_E']: () => infer E }] ? E : never export type UnionToIntersection = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never export type UnionToTuple = UnionToIntersection T : never> extends (_: any) => infer W ? [...UnionToTuple>, W] : [] export type EnforceNonEmptyRecord = keyof R extends never ? never : R export declare type Erase = R & K extends K & infer R1 ? R1 : R /** * Excludes properties of type V from T */ export type ExcludeMatchingProperties = Pick export type EnsureLiteral = string extends K ? never : [K] extends [UnionToIntersection] ? K : never export type Mutable = T extends NonEmptyArray ? Array & { 0: A } : T extends ReadonlyArray ? Array : T extends ReadonlySet ? Set : T extends ReadonlyMap ? Map : { -readonly [K in keyof T]: T[K] }