UNPKG

lazy-js-utils

Version:

A collection of lazy-loaded JavaScript utilities for efficient development

48 lines (47 loc) 2.11 kB
//#region src/types/index.d.ts /** 允许为 null 的类型 */ type Nullable<T> = T | null; /** 允许为 undefined 的类型 */ type Optional<T> = T | undefined; /** 允许为 null 或 undefined 的类型 */ type Maybe<T> = T | null | undefined; /** 获取对象所有 value 的联合类型 */ type ValueOf<T> = T[keyof T]; /** 递归地将对象所有属性变为可选 */ type DeepPartial<T> = { [P in keyof T]?: DeepPartial<T[P]>; }; /** 原始类型的联合 */ type Primitive = string | number | boolean | bigint | symbol | null | undefined; /** 合并两个类型,U 的属性会覆盖 T 的同名属性 */ type Merge<T, U> = Omit<T, keyof U> & U; /** 从对象类型 T 中排除指定属性 K */ type Without<T, K extends keyof T> = Omit<T, K>; /** 只保留对象类型 T 的指定属性 K */ type WithOnly<T, K extends keyof T> = Pick<T, K>; /** 递归地将对象所有属性变为只读 */ type DeepReadonly<T> = { readonly [P in keyof T]: DeepReadonly<T[P]>; }; /** 递归地将对象所有属性变为可选 */ type DeepOptional<T> = { [P in keyof T]?: DeepOptional<T[P]>; }; /** 递归地将对象所有属性变为必选 */ type DeepRequired<T> = { [P in keyof T]-?: DeepRequired<T[P]>; }; /** 递归地将对象所有属性变为可变(非 readonly) */ type DeepMutable<T> = { -readonly [P in keyof T]: DeepMutable<T[P]>; }; /** 获取函数参数类型组成的元组 */ type ArgumentsType<T extends (...args: any) => any> = T extends (...args: infer A) => any ? A : never; /** 获取函数返回值类型 */ type ReturnTypeOf<T extends (...args: any) => any> = T extends (...args: any) => infer R ? R : any; /** 将联合类型转为交叉类型 */ type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never; /** 判断类型是否为 any */ type IsAny<T> = 0 extends 1 & T ? true : false; //#endregion export { ArgumentsType, DeepMutable, DeepOptional, DeepPartial, DeepReadonly, DeepRequired, IsAny, Maybe, Merge, Nullable, Optional, Primitive, ReturnTypeOf, UnionToIntersection, ValueOf, WithOnly, Without };