内置工具类型
属性修饰工具类型
用于对属性的修饰。
Partial
将所有属性变为可选。
原理
ts
type Partial<T> = {
[P in keyof T]?: T[P];
};
ts
interface Base {
name: string
age: number
}
type A = Partial<Base>;
Required<Type>
将所有属性变为必选。
原理
ts
type Required<T> = {
[P in keyof T]-?: T[P];
};
Readonly<Type>
将所有属性变为只读。
原理
typescript
type Readonly<T> = {
readonly [P in keyof T]: T[P];
};
结构工具类型
对既有类型的裁剪、拼接、转换。
Record<Keys, Type>
创建一个新类型,其属性键为Keys
,属性值为Type
。
code
ts
interface A {
name: string
age: number
}
type B = Record<'admin' | 'user', A>;
const personMap: B = {
admin: {
name: 'a',
age: 11
},
user: {
name: 'b',
age: 12
}
}
interface C extends B {
groupName: string
}
const groupA: C = {
groupName: 'a',
...personMap
}
Pick<Type, Keys>
从Type
中选取Keys
属性,创建一个新类型。
原理
ts
type MyPick<T, K extends keyof T> = {
[Key in K]: T[Key];
};
code
ts
interface A {
name: string
age: number
sex?: string
}
type B = Pick<A, 'name' | 'sex'>;
const person: B = {
name: 'pname'
}
Omit<Type, Keys>
从Type
中排除Keys
属性,创建一个新类型。
code
ts
interface A {
name: string
age: number
sex?: string
}
type B = Omit<A, 'name' | 'sex'>;
const person: B = {
age: 11
}
NonNullable<Type>
从Type
中排除null
和undefined
,创建一个新类型。
code
ts
type A = NonNullable<string | number | undefined | null>; // string | number
集合工具类型
对集合(联合类型)的处理。交集、并集、差集、补集。
Exclude<Type, ExcludedUnion>
差集
从Type
中排除ExcludedUnion
中的类型,创建一个新类型。
code
ts
interface A {
name: string
age: number
sex: string
}
type B = Exclude<keyof A, 'name'>; // "age" | "sex"
Extract<Type, Union>
交集
从Type
中选取Union
中的类型,创建一个新类型。
code
ts
interface A {
name: string
age: number
sex: string
}
type B = Extract<keyof A, 'name' | 'age' | 'phone'>; // "name" | "age"
函数/类工具类型
infer
的模式匹配,对一个类型特定位置类型的提取。
Parameters<Type>
以元组
的形式提取函数的参数类型。
code
ts
type fn = (a: number, b: number) => number;
type A = Parameters<fn>; // [a: number, b: number]
const params: A = [12, 14]
实现原理
ts
type FunctionType = (...args: any) => any;
type ParametersCustom<T extends FunctionType> = T extends (...args: infer P) => any ? P : never;
ReturnType<Type>
提取函数的返回值类型。
code
ts
type fn = (a: number, b: number) => number;
type A = ReturnType<fn>; // number
type B = ReturnType<() => void>; // void
实现原理
ts
type FunctionType = (...args: any) => any;
type ReturnType<T extends FunctionType> = T extends (...args: any) => infer R ? R : any;
InstanceType<Type>
提取类的实例类型。
code
ts
class A{
x = 0
y = 0
}
type B = InstanceType<typeof A>; // A
const c: B = new A()
模板字符串工具类型
Uppercase<Type>
转大写
ts
type Res = Uppercase<'yomuki'>; // YOMUKI
Lowercase<Type>
转小写
ts
type Res = Lowercase<'YOMUKI'>; // yomuki
Capitalize<Type>
首字母大写
ts
type Res = Capitalize<'yomuki'>; // Yomuki
type Res2 = Capitalize<'YOMUKI'>; // YOMUKI
Uncapitalize<Type>
首字母小写
ts
type Res = Uncapitalize<'Yomuki'>; // yomuki
type Res2 = Uncapitalize<'YOMUKI'>; // yOMUKI