属性在打字稿接口上不存在
Property Doesn't Exist on Typescript Interface
我有一个自定义的"Enum"接口,它有一个值和一个描述。我已经像这样定义了一个我的枚举接口-
module App {
export interface IMyEnum {
[index: string]: IMyEnumValue;
}
export interface IMyEnumValue {
value: any;
text: string;
}
}
而我的枚举是这样的——
/// <reference path="./enums.interface.ts"/>
module App {
export const StatusEnum: IMyEnum = {
Normal: { value: 100, text: 'Normal' },
Overdue: { value: 200, text: 'Overdue' },
Critical: { value: 300, text: 'Critical' }
}
}
但是打字稿编译器抱怨IMyEnum类型上不存在"Normal"。
let statusCode = StatusEnum.Normal.value;
无论如何可以在不定义IStatusEnum
接口的情况下执行此操作?我认为这将是过度工程化。
当你StatusEnum
投射到IMyEnum
时,你实际上会丢失类型信息,只留下一个索引器:[index: string]: IMyEnumValue
选项 1:使用字符串
let statusCode = StatusEnum["Normal"].value;
您将失去枚举名称的编译时安全性(例如 StatusEnum["normal"].value
将给出运行时错误)。
选项 2:摆脱IMyEnum
,让编译器推断类型。
export const StatusEnum = {
Normal: { value: 100, text: 'Normal' },
Overdue: { value: 200, text: 'Overdue' },
Critical: { value: 300, text: 'Critical' }
}
let statusCode = StatusEnum.Normal.value;
这样,您将拥有类型安全和自动完成功能。
相关文章:
- 正在将事件处理程序添加到不存在的类
- javascript如果图像不存在don't加载它
- 由于响应中不存在“Access Control Allow Origin”标头,跨域请求停止工作
- JavaScript-如果以前不存在文本,如何从文本区域删除新行
- 如何将一个函数附加到一个不存在的元素上
- 在scala或scalajs Diode中,现有类型中的任何一种都符合“;更新一个没有'还不存在”;
- 查找数组's按属性不存在于另一个数组中的对象
- 用javascript在对象上创建不存在的方法
- 仅当值不为'不存在
- casperjs-css选择器存在,但当单击它时会引发“”;CasperError:无法在不存在的选择器“”上调度mou
- 运行时不存在Javascript函数
- 使用webdriver和selenium验证元素是否不存在
- 如果文件不存在,fs.watch是否有错误处理程序
- 试图把注意力集中在一个不重要的元素上是不是一种糟糕的做法;不存在
- Backbonejs:在视图中渲染的模型,但在集合中不存在
- 从params推送到对象(如果不存在)
- 当锚点HREF源不存在时隐藏图像
- 如何从网站获得apple touch图标,如果没有;不存在,则显示收藏夹
- 什么是 ClojureScript 类似地将不存在的对象值设置为 JavaScript 中的 null
- 属性在打字稿接口上不存在