Typescript之keyof和typeof的作用

关于keyof和typeof的个人理解,有不妥之处,欢迎指正:

最近在学习TS的类型体操,发现还是要理论和实战结合,理论这一块就不用说了,可以看TS的官方文档,了解一些基本的概念和用法。实战的话可以在这个网站上练习(https://github.com/type-challenges/type-challenges/blob/main/README.zh-CN.md

1、keyof的作用

作用:用来获取接口,对象,类等的所有属性名组成的联合类型。

获取接口的属性的联合类型:

type person = {
  name: string,
  age: number,
};

type p = keyof person; // a = name | age 

interface Animal {
    name: string,
    sex: string,
}

type animal = keyof Animal; // animal = name | sex

获取对象属性的联合类型:

这里需要借助typeof先获取对象的类型

const info = {
  name: 'tom',
  age: 12,
  sex: 'man'
}
// 第一步利用typeof先获取对象的类型
type t = typeof info;
/**上面的代码输出:type t = {
    name: string;
    age: number;
    sex: string;
}
**/
// 第二步利用keyof获取类型t的属性组成联合类型
type c = keyof t; // c = name | age | sex

//上面的两步可以合并成
type c = keyof typeof info;

获取类的属性组成的联合类型:

class Demo {
  name!: string;
  age!: number
  constructor() {
    
  }

  init() {}
}

type demo = keyof Demo; // demo = name | age | init

 2、typeof的作用

作用:根据已有的值,获取对应值的类型

获取值为数组的类型:

const arr = [1,2,3,4];
type arr1 = typeof arr // arr1 = number[]

获取值为对象的类型:

const info = {
  name: 'tom',
  age: 12,
  sex: 'man'
}
type t = typeof info; 
/**
输出:
type t = {
    name: string;
    age: number;
    sex: string;
}
**/

 

posted @ 2022-09-07 10:26  闯入码途的水产人  阅读(905)  评论(0编辑  收藏  举报