侧边栏壁纸
博主头像
我的学习心得 博主等级

行动起来,活在当下

  • 累计撰写 223 篇文章
  • 累计创建 60 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录

typescript - keyof

Administrator
2021-10-27 / 0 评论 / 0 点赞 / 1187 阅读 / 0 字

定义数据类型的方式有三种:type, interface and class

keyof用来查询数据类型的索引的联合类型,例如

interface User {
    name: string;
    age: number;
    gender: "male" | "female";
}

type A = keyof User;
// type A = "name" | "age" | "gender"

type B = keyof User[];
// type B = number | "length" | "push" | ...
// User[] 本质上是一个 Array 对象

type C = keyof { [x: string]: User };
// type C = string | number
// x: string 意味着任何一个数值或者字符串都可以作为键

class Person {
    name: string = "barwe";
}
type D = keyof Person; // type D = "name";

[]可用于访问数据类型某个属性的类型,格式与访问数据某个属性的值相似:

type E = User["name"]; // string
type F = string["charAt"]; // (pos: number) => string
type G = string[][0]; // string

特别的,如果一个程序中分两次对同一个接口声明了不同的内容,例如:

interface A {
    name: string;
}
interface A {
    name: string;
    age: number;
    gender: "male" | "female";
}

keyof A将得到它们各自公共属性字面量联合声明的联合声明,即相当于:

type B = keyof A
// 等价于
type B = "name" | "age" | "gender"

与之相对的,为[]指定一个公共属性字面量的联合声明,会得到一个由属性的类型组成的联合声明:

type C = A["name" | "age"]
// 等价于
type C = string | number
0

评论区