keyof
keyof 操作符接受一个对象类型作为参数,返回该对象属性名组成的字面量联合类型
type Person = {
name: string;
age: number;
};
type PersonKey = keyof Person; //PersonKey 得到的类型为'name' | 'age'
const str: PersonKey = "name";
常见用法
- 限制访问对象的键,使其合法化
interface Person {
name: string;
age: number;
}
function getValue(p: Person, k: keyof Person) {
return p[k];
}
getValue({ name: "tom", age: 10 }, "age"); // 返回 10
提供了三重类型保护:
参数 p 必须符合 Person 接口
参数 k 必须是 Person 的合法键
返回值类型精确匹配所访问属性类型
- keyof any, extends keyof any
type A = keyof any // type A = string | number | symbol
K extends keyof any //和 extends 关键字结合使用,对对象属性的类型做限定
对象类型属性名的类型只能为 string, number, symbol
typeof
typeof 操作符接受一个对象/实例作为参数,返回该对象/实例的类型
const me: Person = { name: "tom", age: 16 };
type P = typeof me; // {name: string, age: number}
const you: P = { name: "jake", age: 20 };
type PersonKey = keyof typeof me; // 'name' | 'age'
let Data: PersonKey = "name";
in
in 接受一个联合类型,对该联合类型进行迭代
type Options = "dark" | "light";
type Flags = {
[K in Options]: boolean;
};
/* 等价于:
type Flags = {
dark: boolean;
light: boolean;
}
*/