d.ts 枚举值不会出现在编译输出中

问题描述 投票:0回答:1

我有一个项目,其中有一个很大的 global.d.ts 文件。 该项目在 webpack 4 + typescript 4 上运行,并使用 Awesome-typescript-loader 和 babel-loader。 该项目基本上已经很老了。 我正在使用 webpack 5、typescript 5 和 esbuild-loader 设置项目。

在里面,我有几个枚举,例如

declare enum MyEnum {
   propertyOne = 'value1',
   propertyTwo = 'value2',
   //... etc
}

当编译后的代码中输出枚举时,它看起来像这样:

[
   MyEnum.propertyOne,
   MyEnum.propertyTwo,
   //... etc
]

虽然我希望 MyEnum.propertyOne 和 MyEnum.propertyTwo 都是它们各自的值,“value1”和“value2”。

这意味着我希望这样:

[
   'value1',
   'value2',
   //... etc
]

在我的 tsconfig 中,我将以下属性设置为 true:

declaration: true,
preserveConstEnums: true,
isolatedModules: true

此外,global.d.ts 文件包含在“include”数组和“typeRoots”数组中。

我还尝试将枚举设置为 const。

declare const enum MyEnum {
   propertyOne = 'value1',
   propertyTwo = 'value2',
   //... etc
}

我还尝试过 ts-loader,只有在未将 transpileOnly 选项设置为 true 的情况下,它才会正确编译代码,但速度非常慢。

我想知道是否有某种技巧可以使 esbuild-loader 以这种方式或类似的方式工作,只是为了不使代码中断并保持足够的性能。

我也尝试过 babel-loader,但它也有同样的问题。

如果使用 esbuild-loader 或 babel-loader 都无法解决这个问题,我想知道是否还有其他加载器在性能上与 ts-loader 类似?

谢谢你。

typescript webpack-5 babel-loader ts-loader
1个回答
0
投票

我的建议是从您使用

declare
的地方删除
const
:

const enum MyEnum {
   propertyOne = 'value1',
   propertyTwo = 'value2',
   //... etc
}
© www.soinside.com 2019 - 2024. All rights reserved.