我有一个枚举,几乎在我的项目中的任何地方都要用到它。我不想在每个文件中导入它。有没有办法在.d.ts
文件中定义一个枚举,这样它在编译成js时就可以内联了?
在我的types/global.d.ts
文件中,我尝试
declare enum MessageType {
DIRECT = 'direct',
FORWARDED = 'forwarded'
}
当我运行应用程序时,我在代码中的某个地方遇到了MessageType.DIRECT is not defined
错误,我试图使用它。我从来没有导入过这个枚举,因为tslint可以识别它,自动完成也可以工作。
我也试过declare const enum ...
,效果一样。
有什么想法吗?
3条答案
按热度按时间2w2cym1i1#
通过使用
declare
,您已经创建了一个环境枚举,这意味着您正在定义一个现有对象的形状,因此这只是生成类型,而不是一个实际的对象。如果删除
declare
,它将创建枚举的类型和对象https://www.typescriptlang.org/docs/handbook/enums.html具有关于环境枚举的更多详细信息
ghhkc1vu2#
declare
关键字表示相关函数、类等在别处定义,TSC不应为该对象发出任何运行时代码。我建议将其放在某个类型脚本文件中,而不是声明文件(
.d.ts
)中,并删除declare
,或者在.js
文件中包含某种在运行时使用的等效代码。d4so4syb3#
遇到了同样的问题。将枚举定义为常量。为了解决这个问题,我定义了一个
constants.ts
文件,将enums
存储为常量以防止修改。例如,在您的情况下:如果您在类型定义中使用
enum
,请考虑避免使用enum
,而直接指定值,例如: