import { AnyFunction } from "./global.js"; //#region src/types/utils.d.ts /** * @public */ type Expect = T; /** * @public */ type ExpectTrue = T; /** * @public */ type ExpectFalse = T; /** * @public */ type IsTrue = T; /** * @public */ type IsFalse = T; /** * ts对函数类型有特殊处理,可以区分any类型 * @public */ type Equal = (() => T extends X ? 1 : 2) extends (() => T extends Y ? 1 : 2) ? true : false; /** * @public */ type IsEqual = Equal; /** * @public */ type NotEqual = true extends Equal ? false : true; /** * any 类型与任何类型的交叉都是 any,也就是 1 & any 结果是 any。 */ /** * @public */ type IsAny = 0 extends 1 & T ? true : false; /** * @public */ type NotAny = true extends IsAny ? false : true; /** * @public */ type Debug = { [K in keyof T]: T[K] }; /** * @public */ type MergeInsertions = T extends object ? { [K in keyof T]: MergeInsertions } : T; /** * @public */ type Alike = Equal, MergeInsertions>; /** * @public */ type ExpectExtends = EXPECTED extends VALUE ? true : false; /** * @public */ type ExpectValidArgs any, ARGS extends any[]> = ARGS extends Parameters ? true : false; /** * 类型编程中的If判断 * @public */ type If = Condition extends true ? T : F; /** * Readonly递归版本 * @public */ type DeepReadonly> = { readonly [Key in keyof Obj]: Obj[Key] extends object ? Obj[Key] extends AnyFunction ? Obj[Key] : DeepReadonly : Obj[Key] }; /** * 判断是否是never类型 * @public */ type IsNever = [T] extends [never] ? true : false; /** * 判断是否为元组 * 元组和数组的区别是,数组的length是number类型 * @public */ type IsTuple = T extends [...params: infer Elements] ? NotEqual : false; /** * @public */ type Nullable = T | null | undefined; //#endregion export { Alike, Debug, DeepReadonly, Equal, Expect, ExpectExtends, ExpectFalse, ExpectTrue, ExpectValidArgs, If, IsAny, IsEqual, IsFalse, IsNever, IsTrue, IsTuple, MergeInsertions, NotAny, NotEqual, Nullable };