keyof 与 extends keyof 的区别
- K keyof T K是获取T类型的键集,只能为键集中的某一个值
- K extends keyof T 表示K是T的子类型,这是一个类型约束,可以为T的多个属性
Record
record 的源码和解释如下: ```typescript type Record= {
[P in K]: T;
};
- type KEY = keyof any // 不管是什么类型,它的key 都是三个基本类型的一种。 即KEY为 string / number /symbol
- [P in K] 就是说P可以取string number symbol
```
Record就是将一个类型的键值以另一个类型替换
TS的几个内容工具类型
- Partial 生成一个新类型,该类型与T拥有相同的属性,但所有属性均为可选项
- Require 生成一个新类型,该类型与T拥有相同的属性,但所有属性为必选项
- Readonly 生成一个新类型,该类型与T拥有相同的属性,但所有属性为只读
- Pick 生成一个新类型,选择类型中的某一部分属性
- Exclude 排除类型中的某一部分内容,操作联合类型
- Omit 删除接口或者类型中的键值对
- NonNullable 排除null和undefined
- ReturnType 获得函数返回值的类型
extends
在typescript中extends不是类中的继承而是一个类型约束如
type BaseType = string | number | boolan;
T extends BaseType, // 此时的T只能是上面的三种类型
extends经常与keyof一起使用,如我们有一个方法专门用来获取对象的值,但这个对象并不确定,我们就可以使用extends和 keyof进行约束
keyof
类似Object.keys, 用于获取一个接口中Key的联合类型