我的打字稿如下所示。
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
答案 0 :(得分:4)
在打字稿中,枚举只能按编号和确切的属性名称编制索引。
它希望标识符textbox
或0
的类型为"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];