gpt4 book ai didi

javascript - 属性在 Typescript 接口(interface)上不存在

转载 作者:行者123 更新时间:2023-11-30 16:17:19 25 4
gpt4 key购买 nike

我有一个自定义的“Enum”接口(interface),它有一个值和一个描述。我定义了一个这样的枚举接口(interface)-

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' }
}
}

但是 typescript 编译器提示“Normal”在 IMyEnum 类型上不存在。

let statusCode = StatusEnum.Normal.value;

是否可以在不定义 IStatusEnum 接口(interface)的情况下执行此操作?我认为这会过度工程化。

最佳答案

当您将 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 - 属性在 Typescript 接口(interface)上不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35298384/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com