访问号码枚举传递字符串

时间:2018-03-03 01:41:42

标签: javascript typescript enums

我尝试根据动物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

问题 - 如何将1Cat

相关联

1 个答案:

答案 0 :(得分:0)

当您使用变量(例如name)来寻址枚举的值时,如果您将类型定义为string,它会认为它可以包含任何值,甚至是枚举中不存在。因此输出变为any

要避免此问题,您可以直接调用枚举(Animals['Cat']),也可以将变量的值限制为枚举值,如下所示:

const name: 'Cat' | 'Dog' = 'Cat';
const id: number = Animals[name]; // 1