TypeScript06:操作符

52 阅读1分钟

keyof

keyof 操作符接受一个对象类型作为参数,返回该对象属性名组成的字面量联合类型

type Person = {
  name: string;
  age: number;
};

type PersonKey = keyof Person; //PersonKey 得到的类型为'name'  | 'age'

const str: PersonKey = "name";

常见用法

  1. 限制访问对象的键,使其合法化
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 的合法键
返回值类型精确匹配所访问属性类型
  1. 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;
}
*/