Skip to content

Typescript 进阶

ts 内置 utility-types

第三方扩展 utility-types 在内置的基础上增强了功能

常用内置工具类型

ts
interface Props1 {
  a: number;
  b: string;
}

interface Props2 {
  a?: number;
  b?: string;
}

interface Props3 {
  readony a: number;
  readony b: string;
}
  • Partial<Type> 将属性都设为可选 eg: Partial<Props1> = Props2

  • Required<Type> 将属性都设为必填 eg: Required<Props2> = Props1

  • Readonly<Type> 将属性都设为必填 eg: Readonly<Props1> = Props3

  • Record<Keys, Type> 构建 Object 类型

  • Pick<Type, Keys> 选取部分属性构建 Object 类型 Pick<Props1, "a" | "b">

  • Omit<Type, Keys> 剔除部分属性构建 Object 类型

  • Exclude<Type, ExcludedUnion> 排除集合里的部分可能,补集

  • Extract<Type, Union> 类型交集

ts
function toHex(num: number) {
  return num.toString(16)
}
  • Parameters<Type> 返回函数的参数的类型 Parameters<typeof toHex> = number

  • ReturnType<Type> 返回函数的返回值的类型 ReturnType<typeof toHex> = string

第三方补充常用工具类型

取对象类型的键类型

FunctionKeys<T>NonFunctionKeys<T>MutableKeys<T>ReadonlyKeys<T>RequiredKeys<T>OptionalKeys<T>

取对象类型的值类型

ValuesType<T>

取对象类型的部分属性构建类型

PickByValue<T, ValueType>PickByValueExact<T, ValueType>OmitByValue<T, ValueType>OmitByValueExact<T, ValueType>

两对象类型之间操作(类似 lodash)

Intersection<T, U>Diff<T, U>Subtract<T, T1>Overwrite<T, U>Assign<T, U>

增强功能的

Required<T, K> 相比 Required<T> 多加了一个可选参数,可使部分属性为 required:

Required<{ a?: number; b?: string; }, "a"> => { a: number; b?: string; }

Mutable<T> 使全部属性变成可变类型,Readonly<T> 反操作

PromiseType<T> 获取 Promise 的 resolve 类型

PromiseType<Promise<string>> => string

嵌套对象操作

DeepReadonly<T> 所有嵌套属性都设为只读 DeepRequired<T>DeepNonNullable<T>DeepPartial<T>