索引类型

keyof

keyof 操作符可以将对象中的所有键转换为对应字面量类型,然后再组合成联合类型。注意,这里并不会将数字类型的键名转换为字符串类型字面量,而是仍然保持为数字类型字面量。

interface Foo {
  name: 1,
  599: 2
}

// "name" | 599
type FooKeys = keyof Foo;

索引类型访问

在 JavaScript 中我们可以通过 `obj[expression]`` 的方式来动态访问一个对象属性(即计算属性),expression 表达式会先被执行,然后使用返回值来访问属性。而 TypeScript 中我们也可以通过类似的方式,只不过这里的 expression 要换成类型。

interface NumberRecord {
  [key: string]: number;
}

type PropType = NumberRecord[string]; // number