import { Str, StrToTuple, ToMap, VarUnion } from ".."; export type FlexEqual = X extends Y ? true : false; export type If_FlexEqual = X extends Y ? true : false; export type Equal = (() => T extends X ? 1 : 2) extends (() => T extends Y ? 1 : 2) ? true : false; export type UnEqual = true extends Equal ? false : true; export type If_Equal = Equal; export type If_UnEqual = UnEqual; export type If_Any = 0 extends (1 & T) ? true : false; export type If_UnAny = true extends If_Any ? false : true; export type If_Never = [T] extends [never] ? true : false; export type If_UnNever = Not>; export type Check = T; export type If_IncludeVar = T extends string ? (T extends `${infer F}${infer R}` ? (F extends VarUnion ? true : If_IncludeVar) : (false)) : (false); export type Not = T extends true ? false : true; export type Or = If_Never extends true ? (false) : ((T extends true ? true : never) extends never ? false : true); export type And = If_Never extends true ? false : T; export type If_Every = (T extends true ? (true) : (false)) extends true ? true : false; export type If_Some = Or; export type If_Union = If_Never extends true ? (false) : (T extends U ? ([ U ] extends [T] ? false : true) : (never)); export type If_Num = If_Never extends true ? (false) : (T extends number ? true : false); export type If_UnionInclude = If_Never extends true ? (false) : (S extends T ? true : false); export type GetKeyOf = K extends K ? K : never; export type GetValueOf = K extends K ? T[K] : never; export type If_Arr = If_Never extends true ? (false) : (T extends any[] ? (true) : (false)); export type If_Tuple = If_Never extends true ? (false) : (T extends readonly any[] ? (number extends T["length"] ? false : true) : (false)); export type Len = T extends string ? (Type["length"], TargetType>) : (Type); export type Switch = Cases extends [infer Curr extends any[], ...infer R] ? (Curr[0] extends true ? (Curr[1]) : (Switch)) : (Default); export type TypeOf = T extends string ? (string) : (T extends number ? (number) : (T extends bigint ? (bigint) : (never))); export type Type = Str extends `${infer CT extends TargetType}` ? CT : T; export type If_Extends = If_Never extends true ? (If_Never extends true ? (true) : (false)) : (Sub extends Parent ? true : false); export type RequiredSome = ToMap> & Omit>; export type Expand = T extends infer O ? { [K in keyof O]: O[K]; } : never; export type ExpandDeep = T extends object ? T extends infer O ? { [K in keyof O]: ExpandDeep; } : never : T; export type If_PlainObject = T extends object ? (T extends Array | Function | Date | RegExp | Map | Set ? false : true) : (false);