welcome to my blog,nya~!
Meow!
Is the Order a Kitty?
things i love:
- sleeping
- poop
Meow!
Is the Order a Kitty?
类型工具是指在类型层面上进行操作的工具,我更倾向于按照使用目的来划分类型工具。
注意: 类型工具不是类型,而是类型的操作。请区分
类型工具和工具类型
类型收窄)// 封装类型
type T = string | number;
interface A {
a: string;
}
interface B {
b: number;
}
// 封装类型结构
type C = A & B;
类型别名 + 泛型
// 工具类型
type T1 = Partial<T>; // 可选
type T2 = Required<T>; // 必选
// 联合类型
type T = string | number;
// 交叉类型
type T = A & B;
// 索引签名类型
interface A {
[key: string]: string;
}
// 索引类型查询
interface A {
a: string;
b: number;
}
type T = keyof A; // a | b
// 索引类型访问
interface A {
a: string;
b: number;
}
type T = A["a"]; // string
/* 这里的"a"是一个字符串字面量类型,它不是一个属性名 */
interface B {
[key: string]: number;
}
type T = B[string]; // number
interface A {
a: string;
b: number;
}
// 类型别名 + 泛型 = 工具类型
type Stringify<T> = {
[P in keyof T]: string;
};
type Clone<T> = {
[P in keyof T]: T[P];
}
type T1 = Stringify<A>; // { a: string; b: string; }
| 类型工具 | 创建新类型的方式 | 常见搭配 |
|---|---|---|
| 类型别名 | 将一组类型/类型结构封装,作为一个新的类型 | 联合类型、映射类型 |
| 工具类型 TypeName<T> | 在类型别名的基础上,基于泛型去动态创建新类型 | 基本所有类型工具 |
| 联合类型 | 创建一组类型集合,满足其中一个类型即满足这个联合类型(||) | 类型别名、工具类型 |
| 交叉类型 | 创建一组类型集合,满足其中所有类型才满足映射联合类型(&&) | 类型别名、工具类型 |
| 索引签名类型 | 声明一个拥有任意属性,键值类型一致的接口结构 | 映射类型 |
| 索引类型查询 | 从一个接口结构,创建一个由其键名字符串字面量组成的联合类型 | 映射类型 |
| 索引类型访问 | 从一个接口结构,使用键名字符串字面量访问到对应的键值类型 | 类型别名、映射类型 |
| 映射类型 | 从一个联合类型依次映射到其内部的每一个类型 | 工具类型 |