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

时间:2018-01-26 12:30:58

标签: typescript

假设我有一个如下对象:

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

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

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

但有什么办法可以动态地宣布这个吗?因此,obj中添加的任何方法都会被视为myVar的有效值。

1 个答案:

答案 0 :(得分:4)

您可以使用keyof运算符,这将为您提供一个包含其他类型的所有属性名称的类型。要获得obj的类型,我们使用typeof运算符。

let myVar : keyof typeof obj; // Actual type will be  "method1" | "method2" | "method3"

如果您向对象添加更多键,myVar的类型将自动更新。但这只有在编译时知道密钥才有效。

有关keyof的详情,请参阅here