Skip to content

自己写的类型工具

1. Mutable<T>

将对象的所有属性设为可变的(去除只读属性)。

ts
type Mutable<T> = {
    -readonly [P in keyof T]: T[P] extends object ? Mutable<T[P]> : T[P]
}

说明:

  • Mutable<T> 类型通过使用 -readonly 来去除对象属性上的 readonly 修饰符,从而使得对象的所有属性变为可变。
  • 如果属性是对象类型,递归地应用 Mutable 类型,使嵌套对象的属性也变为可变。

2. OptionalExcept<T, K>

将指定的字段设为必需,其他字段设为可选。

ts
type OptionalExcept<T, K extends keyof T> = {
    [P in K]: T[P] // 保持指定字段为必需
} & {
    [P in Exclude<keyof T, K>]?: T[P] // 其他字段变为可选
}

说明:

  • OptionalExcept<T, K> 类型接受两个类型参数:T 是对象类型,KT 中的键。
  • 该类型会使 K 中的字段必需,K 外的字段变为可选。

3. WithNullUndefined<T>

接收一个类型 T 并返回一个联合类型,包括 nullundefined

ts
type WithNullUndefined<T> = T | null | undefined

说明:

  • WithNullUndefined<T> 类型将 T 类型与 nullundefined 结合,返回一个包含 Tnullundefined 的联合类型。

4. Values<T>

接受一个 T 类型,必须是一个对象,返回这个对象值的联合类型。

ts
type Values<T extends Record<string, unknown>> = T[keyof T]

说明:

  • Values<T> 类型通过 keyof T 获取对象 T 的所有属性名,并返回这些属性对应的值的联合类型。
  • T extends Record<string, unknown> 限制 T 必须是一个对象类型。

5. Nullable<T>

接受一个 T 类型,每个属性增加 null 类型。

ts
type Nullable<T> = {
    [K in keyof T]: T[K] | null
}

说明:

  • Nullable<T> 类型通过映射类型,使 T 的每个属性值都变为原来的类型或 null,即将每个属性类型变为可为 null