Record

Record源码
他人博客:https://blog.csdn.net/weixin_38080573/article/details/92838045

  1. // 将K中的每一个属性值都转化为T类型
  2. // extends 继承
  3. // keyof any类型中的key值集合
  4. // Record 源码
  5. type Record<K extends keyof any, T> = {
  6. [P in K] : T
  7. }
  8. // demo
  9. type PetsName = 'dog' | 'cat'; // PetsName可以是对象、联合、枚举等等类型
  10. interface PetInfo {
  11. name: string;
  12. age: number;
  13. }
  14. type PetsMap = Record<PetsName, PetInfo>; // 使用Record传化类型
  15. let PetsResult:PetsMap = {
  16. dog: { name: '张三', age: 1 },
  17. cat: { name: '李四', age: 10 }
  18. }

unknown

另类的全局顶级类型,类似于any,但是又区别any,unknown类型会更加严格
博客:https://blog.csdn.net/weixin_33716557/article/details/93177689

  1. // 在any的情况下
  2. let anyValue: any
  3. let value1:any = anyValue // Ok
  4. let value2:unknown = anyValue // Ok
  5. let value3:string = anyValue // Ok
  6. let value4:object = anyValue // Ok
  7. let value5: any[] = anyValue // Ok
  8. let value6: Function = anyValue // Ok
  9. // 在unknown的情况下
  10. let unknownValue:unknown
  11. let value1:any = unknownValue // Ok
  12. let value2:unknown = unknownValue // Ok
  13. let value3:string = unknownValue // Error
  14. let value4:object = anyValue // Rrror
  15. let value5: any[] = anyValue // Error
  16. let value6: Function = anyValue // Error