TGViewer
DEV: Рубиновые тона DEV: Рубиновые тона @dev_in_ruby_colors · 3.27K subscribers
Post #352 812
Рубрика "удивительный мир TypeScript". Есть, к примеру, вот такой код:

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;
}


Тогда работает. 🤪
  • 🤯 2
More from @dev_in_ruby_colors
  1. Oct 4, 2026В этом уроке по абстрактной алгебре говорим про ideals (идеалы), factor (quotient) rings и…
  2. Sep 28, 2026Github буйствует
  3. Sep 26, 2026В этом уроке по абстрактной алгебре говорим про области целостности, делители нуля, характ…
  4. Sep 22, 2026А тем временем сказ о ведьмаке, потерявшем память, уже доступен в виде аудиокниги. Целых 1…
  5. Sep 20, 2026В этом уроке по абстрактной алгебре продолжаем говорить о кольцах: в частности о subrings…
  6. Sep 17, 2026Сделал обзор актуальных библиотек JS для сбора данных, 10 штук бодрых решений на все случа…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →