我尝试根据动物id
访问name
:
enum Animals {
Cat = 1,
Dog, // 2
}
const name: string = "Cat";
const id: number = Animals[name] // Element implicitly has an 'any' type because index expression is not of type 'number'.
摘自https://basarat.gitbooks.io/typescript/docs/enums.html#enums-and-strings
enum Tristate {
False,
True,
Unknown
}
console.log(Tristate["False"]); // 0
问题 - 如何将1
与Cat
答案 0 :(得分:0)
当您使用变量(例如name
)来寻址枚举的值时,如果您将类型定义为string
,它会认为它可以包含任何值,甚至是枚举中不存在。因此输出变为any
。
要避免此问题,您可以直接调用枚举(Animals['Cat']
),也可以将变量的值限制为枚举值,如下所示:
const name: 'Cat' | 'Dog' = 'Cat';
const id: number = Animals[name]; // 1