Я пытаюсь скомпилировать библиотеку классов TypeScript для ES5, используя комбинацию @ babel / preset-typcript и @ babel / env. Без каких-либо плагинов это приводит к ошибке компиляции:
SyntaxError: C:\projects\time\git\core\main\src\LocalDate.ts: Missing class properties transform.
35 | class LocalDate {
36 |
> 37 | private _weekBasedYear: number = null;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
38 |
39 | private constructor(readonly nativeUtc: Date) {
40 | }
И вот я застрял. В официальной документации нет ссылки на рекомендуемый плагин преобразования свойств класса. Я пытался использовать @ babel / plugin-offer-class-properties , как это рекомендуется для JS, но, похоже, он не совместим с TypeScript. Например, когда я компилирую следующую пару классов:
abstract class ClassA {
abstract readonly value: number;
}
export class ClassB extends ClassA {
get value() {
return 1;
}
}
export const B = new ClassB();
Он выдает следующий код JS:
var ClassA = function ClassA() {
_classCallCheck(this, ClassA);
_defineProperty(this, "value", void 0);
};
var ClassB = /*#__PURE__*/function (_ClassA) {
_inherits(ClassB, _ClassA);
function ClassB() {
_classCallCheck(this, ClassB);
return _possibleConstructorReturn(this, _getPrototypeOf(ClassB).apply(this, arguments));
}
_createClass(ClassB, [{
key: "value",
get: function get() {
return 1;
}
}]);
return ClassB;
}(ClassA);
exports.ClassB = ClassB;
var B = new ClassB();
exports.B = B;
, в результате чего значение B.value будет неопределенным, а не 1.
Я не могу скомпилировать мой TypeScript напрямую в JS, потому что я использую ES6 API, а компилятор TypeScript отказывается компилировать его использование для меня.
src/Zone.ts(51,14): error TS2339: Property 'isFinite' does not exist on type 'NumberConstructor'.
src/Zone.ts(58,10): error TS2339: Property 'startsWith' does not exist on type 'string'.
src/Zone.ts(143,15): error TS2339: Property 'isFinite' does not exist on type 'NumberConstructor'.
Я ожидаю Пользователь библиотеки должен присоединить подходящий полифилл, чтобы обеспечить доступность всего этого API, но я не знаю, как объяснить это компилятору TypeScript.
Мой .babelr c:
{
"plugins": [
"@babel/plugin-proposal-class-properties"
],
"presets": [
[
"@babel/env",
{
"targets": {
"browsers": [
"last 2 versions",
"IE >= 11"
]
}
}
],
"@babel/preset-typescript"
],
"parserOpts": {
"strictMode": true
},
"sourceMaps": "inline"
}
Команда компиляции:
node_modules/.bin/babel --extensions ".ts" src --out-dir dist
Как правильно скомпилировать классы TypeScript в ES5 с Babel?