abstract class Parent {
constructor(params: any) {
for (const key of Object.keys(params)) {
(<any>this)[key] = params[key];
}
}
}
class Child extends Parent {
test!: number;
}
const c = new Child({
test: 1
});
console.log(c);Ну, короче говоря, потомок наследует конструктор и там все атрибуты объявляются. Это нужно, если есть 1 абстрактный класс-родитель и у него куча потомков со сходным функционалом, но разными атрибутами. Так вот на любой версии до es2022 это работает. На es2022 - нет, поле
test всегда оказывается пустым.А разгадка простая: нужно всё-таки писать
declare:class Parent {
constructor(params: any) {
for (const key of Object.keys(params)) {
(<any>this)[key] = params[key];
}
}
}
class Child extends Parent {
declare test: number;
}Тогда работает. 🤪