Typescript,声明一个变量类型必须是对象的键

11

假设我有以下这样一个对象:

let obj = {
  method1: () => { return "method1 called" },
  method2: () => { return "method2 called" },
  method3: () => { return "method3 called" },
}

我想声明一个变量,它的值只能是obj中存在的键之一。
手动地,我可以像这样做:

let myVar : "method1" | "method2" | "method3";

但是有没有办法以动态方式声明它?这样,我在obj中添加的任何方法都会被视为myVar的有效值。

1个回答

13
您可以使用 keyof 操作符,这会为您提供另一种类型的所有属性名称的类型。要获取 obj 的类型,我们使用 typeof 操作符。
let myVar : keyof typeof obj; // Actual type will be  "method1" | "method2" | "method3"

如果您向对象添加更多键,则myVar的类型将自动更新。但是,这仅在编译时已知键的情况下有效。

有关keyof的更多信息,请参见此处


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接