Appearance
自己写的类型工具
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是对象类型,K是T中的键。- 该类型会使
K中的字段必需,K外的字段变为可选。
3. WithNullUndefined<T>
接收一个类型 T 并返回一个联合类型,包括 null 和 undefined。
ts
type WithNullUndefined<T> = T | null | undefined说明:
WithNullUndefined<T>类型将T类型与null和undefined结合,返回一个包含T、null和undefined的联合类型。
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。