keyof 与 extends keyof 的区别

  1. K keyof T K是获取T类型的键集,只能为键集中的某一个值
  2. K extends keyof T 表示K是T的子类型,这是一个类型约束,可以为T的多个属性

    Record

    record 的源码和解释如下: ```typescript type Record = {
  1. [P in K]: T;

};

  1. type KEY = keyof any // 不管是什么类型,它的key 都是三个基本类型的一种。 即KEY为 string / number /symbol
  2. [P in K] 就是说P可以取string number symbol ``` Record就是将一个类型的键值以另一个类型替换

    TS的几个内容工具类型

  • Partial 生成一个新类型,该类型与T拥有相同的属性,但所有属性均为可选项
  • Require 生成一个新类型,该类型与T拥有相同的属性,但所有属性为必选项
  • Readonly 生成一个新类型,该类型与T拥有相同的属性,但所有属性为只读
  • Pick 生成一个新类型,选择类型中的某一部分属性
  • Exclude 排除类型中的某一部分内容,操作联合类型
  • Omit 删除接口或者类型中的键值对
  • NonNullable 排除null和undefined
  • ReturnType 获得函数返回值的类型

image.png

extends

在typescript中extends不是类中的继承而是一个类型约束如

  1. type BaseType = string | number | boolan;
  2. T extends BaseType, // 此时的T只能是上面的三种类型

extends经常与keyof一起使用,如我们有一个方法专门用来获取对象的值,但这个对象并不确定,我们就可以使用extends和 keyof进行约束

keyof

类似Object.keys, 用于获取一个接口中Key的联合类型