侧边栏壁纸
  • 累计撰写 218 篇文章
  • 累计创建 59 个标签
  • 累计收到 5 条评论

typescript - keyof

barwe
2021-10-27 / 0 评论 / 0 点赞 / 1,046 阅读 / 984 字
温馨提示:
本文最后更新于 2023-06-07,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

定义数据类型的方式有三种: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

评论区