Typescript TypeError с es2022, но не с es2021
Я пытаюсь обновить целевое свойство файла tsconfig.json с es2015 на es2022. Но я получаю сообщение об ошибке при запуске тестов, которые, я думаю, используют только tsc без Babel:
Chrome Headless 110.0.5481.177 (Mac OS 10.15.7) Ошибка типа: невозможно прочитать свойства неопределенного значения (чтение «getSomeValue»)
Код, вызывающий эту проблему:
export class MyService {
private xyz$ = this.otherService.getSomeValue().pipe(...
constructor(private readonly otherService: SettingsService) {}
}
Я предполагаю, что ошибка связана с новыми функциями полей классов, представленными в es2022? Но я не понимаю, почему здесь должна быть проблема? С es2021 все работает нормально.
Я не уверен, поможет ли tsconfig.json?
{
"compileOnSave": false,
"compilerOptions": {
"baseUrl": "./",
"outDir": "./dist/out-tsc",
"sourceMap": true,
"declaration": false,
"downlevelIteration": true,
"experimentalDecorators": true,
"moduleResolution": "node",
"importHelpers": true,
"target": "es2022",
"module": "es2022",
"resolveJsonModule": true
}
}
1 ответ
Вот две связанные проблемы:
- Порядок инициализации поля класса различается в целевых ES2021 и ES2022 #52331.
- useDefineWithClassFields должен использовать ошибку перед инициализацией, когда инициализатор свойства класса ссылается на свойство параметра #50971
Насколько я понимаю, ожидается, что доступ к свойству параметра конструктора в свойстве класса завершится неудачно сuse-before-init
, но компилятор машинописного текста в настоящее время не выдает эту ошибку.
class Test {
// constructor that sets a field
constructor(private param: Param){
}
// this is expected to fail - this.param is NOT assigned yet
a = this.param.a;
}