У меня есть проект, в котором есть большой файл 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, но при этом являются производительными?
Спасибо.
Я предлагаю удалить declare
из того места, где вы использовали const
:
const enum MyEnum {
propertyOne = 'value1',
propertyTwo = 'value2',
//... etc
}
Я приму это как ответ, потому что это часть того, что я сделал. Я решил переместить перечисления в файл .ts и импортировать их туда, где они необходимы. Теперь компилятор не ломается, хотя значения не встроены, доступ к значениям осуществляется через свойство веб-пакета. Я немного расстроен этим, но это то, что есть.
В нем говорится: Ошибка TypeScript: объявления верхнего уровня в файлах .d.ts должны начинаться с модификатора «объявить» или «экспортировать». Я попытался удалить расширение .d.ts и заменить его на .ts, после чего оно больше не жаловались, но это не помогло скомпилировать перечисление.