假设我有一个如下对象:
let obj = {
method1: () => { return "method1 called" },
method2: () => { return "method2 called" },
method3: () => { return "method3 called" },
}
我想声明一个变量,该值只能是obj
中存在的一个键
手动,我可以这样做:
let myVar : "method1" | "method2" | "method3";
但有什么办法可以动态地宣布这个吗?因此,obj
中添加的任何方法都会被视为myVar
的有效值。
答案 0 :(得分:4)
您可以使用keyof
运算符,这将为您提供一个包含其他类型的所有属性名称的类型。要获得obj
的类型,我们使用typeof
运算符。
let myVar : keyof typeof obj; // Actual type will be "method1" | "method2" | "method3"
如果您向对象添加更多键,myVar
的类型将自动更新。但这只有在编译时知道密钥才有效。
有关keyof
的详情,请参阅here。