在编译时内联的Typescript全局枚举

时间:2019-02-26 16:43:16

标签: typescript enums

我有一个枚举,在我的项目中几乎所有地方都可以使用它。我不想将其导入每个文件中。有没有一种方法可以在.d.ts文件中定义一个枚举,以便在编译为js时可以内联?

在我尝试过的types/global.d.ts文件中

declare enum MessageType {
    DIRECT = 'direct',
    FORWARDED = 'forwarded'
}

当我运行该应用程序时,在我尝试使用该代码的地方出现MessageType.DIRECT is not defined错误。我从未导入过该枚举,因为tslint可以识别它并且自动补全也可以正常工作。

我也尝试过declare const enum ...,效果相同。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

通过使用declare,您已经创建了一个环境枚举,这意味着您正在定义现有对象的形状,因此这只是生成类型,而不是实际对象。

如果删除declare,它将同时创建枚举的类型和对象

https://www.typescriptlang.org/docs/handbook/enums.html详细介绍了环境枚举

答案 1 :(得分:0)

declare关键字指示相关的函数,类等在其他位置定义,并且TSC不应为该对象发出任何运行时代码。

我建议将其放置在声明文件(.d.ts)之外的其他打字稿文件中,并删除declare或在{{1 }}文件。