export type asConst = t extends [] ? t : asConstRecurse type asConstRecurse = { [k in keyof t]: t[k] extends Literalable | [] ? t[k] : asConstRecurse } export type Literalable = string | boolean | number | bigint | null | undefined export type evaluate = { [k in keyof t]: t[k] } & unknown export type exact = { [k in keyof t]: k extends keyof u ? t[k] : never } export type defer = [t][t extends any ? 0 : never] export type merge = evaluate & merged> export type isAny = [unknown, t] extends [t, {}] ? true : false export type isNever = [t] extends [never] ? true : false export type isUnknown = unknown extends t ? [t] extends [{}] ? false : true : false export type conform = t extends base ? t : base export type equals = (<_>() => _ extends t ? 1 : 2) extends < _ >() => _ extends u ? 1 : 2 ? true : false export const id = Symbol("id") export type id = typeof id export type nominal = t & { readonly [id]: id } export type extend = u // eslint-disable-next-line @typescript-eslint/no-unused-vars export type subsume = u export type defined = t & ({} | null) export type autocomplete = | suggestions | (string & {})