元素隐含有一个“任何”的元素。键入因为索引表达式不是类型'数字'用于将字符串转换为打字稿中的枚举的枚举

时间:2017-12-17 21:32:57

标签: typescript

我的打字稿如下所示。

enum Categories {
    textbox = 1,
    password
}

let typedata:string ="textbox";
let enumdata:Categories;

我想将此文本框字符串转换为枚举。这样我就可以在enumdata变量中分配它。当我尝试使用

这样做时
enumdata=Categories[typedata]

我收到错误

元素含有一个' any'输入,因为索引表达式的类型不是'数字'

如果有人遇到此问题,请与我们联系。如果您找到了解决方案,请为我提供示例。

我的打字稿版本是2.6.2

tsconfig.json

{
  "compilerOptions": {
      "module": "commonjs",
      "target": "es6",
      "lib": [
        "dom",
        "es2015"
      ],
      "noImplicitAny": false,
      "sourceMap": true,
      "rootDir": "src",
      "outDir": "dist",
      "noEmitOnError": true
  }
}

谢谢 VIPIN

1 个答案:

答案 0 :(得分:4)

在打字稿中,枚举只能按编号和确切的属性名称编制索引。

它希望标识符textbox0的类型为"textbox"number,但会将该值视为字符串类型。

要解决此问题,您可以声明一种类型,确保使用正确的属性名称来获取相应的枚举值。例如:

enum Categories {
    textbox = 1,
    password
}

declare type CategoryType = keyof typeof Categories;

const getCategory = (key: CategoryType) => Categories[key];
/* The following will work as well, but does not ensure the correct typecheck when calling the function. 
   However you can keep you 'typedata' field as type of  string. */
// const getCategory = (key: string) => Categories[key as CategoryType];

let enumdata: Categories;
const typedata: CategoryType = "textbox";

enumdata = getCategory(typedata);

......或者只是

const typedata: string = "textbox";
enumdata = Categories[typedata as CategoryType];