我的枚举定义如下:

export enum SwitchEnum{
  On = 'ON',
  Off = 'OFF',
}

我想从此枚举创建一个对象数组,因此我try 了以下操作:

export interface SelectProps {
  id: number;
  value: string | number | undefined;
  label: string | undefined;
}

const listItems: SelectProps [] = Object.keys(SwitchEnum).map((key, index) => ({
  id: index,
  value: SwitchEnum[key],
  label: key
}));

但Typescript抱怨此错误:

Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'typeof SwitchEnum'.
  No index signature with a parameter of type 'string' was found on type 'typeof SwitchEnum'

我如何解决这个问题?

推荐答案

在TypeScript中,枚举在编译时用作类型,以实现常量的类型安全,但在运行时它们被视为对象.这是因为,一旦将TypeScript代码编译为JavaScript,它们就会转换为普通对象.因此,上述对象的解释也适用于此处.因此,要修复typeScript错误,应将代码更改为:

const listItems: SelectProps [] = Object.keys(SwitchEnum).map((key,index) => ({
 id: index,
 value: SwitchEnum[key as keyof typeof SwitchEnum],
 label: key
}));

Javascript相关问答推荐

从实时数据库(Firebase)上的子类别读取数据

深嵌套的ng-container元素仍然可以在Angular 布局组件中正确渲染内容吗?

如何通过使用vanilla JS限制字体大小增加或减少两次来改变字体大小

使用ThreeJ渲染的形状具有抖动/模糊的边缘

在forEach循环中获取目标而不是父对象的属性

从页面到应用程序(NextJS):REST.STATUS不是一个函数

NG/Express API路由处理程序停止工作

Rxjs流中生成IMMER不能在对象上操作

我正在试着做一个TicTacToe Ai来和我玩.但是,我试着在第一个方块被点击时出现一个X,然后在第二个方块之后出现一个O

如何根据查询结果重新排列日期

Cherrio JS返回父div的所有图像SRC

JWT Cookie安全性

React Refs不与高阶组件(HOC)中的动态生成组件一起工作

将Singleton实例设置为未定义后的Angular 变量引用持久性行为

在HTML5画布上下文中使用putImageData时,重载解析失败

由于http.get,*ngIf的延迟很大

是否在图表中计算线上的点坐标?

JSdiscord机器人为什么不工作前缀?如何决定与discord机器人的问题?

使用EXCEL.js模块+node.js分隔标题行中的列

在脚本设置中使用Vue3 v-html,无需额外的换行标记