TGViewer
Digitable: Channel Digitable: Channel @digitable_blog · 214 subscribers
Post #32 95
#development #typescript #patterns #classes #inheritance #fp #oop

Каким образом заставить класс расширить поведение обобщенного класса? Или как сделать "наследование налету"?

Например у нас есть вот такой код


class Dog {
private name = 'dog';

public getName() {
console.info(this.name);
}
}

class Duck {
private name = 'duck';

public getName() {
console.info(this.name);
}
}


Но в какой-то момент мы хотим сделать так, чтобы наследовалась либо утка либо собака, в зависимости от переданного generic-а в наши подклассы, например подвергнутые мутациям



export function useDraft<Animal extends Duck | Dog>(
animal: Animal
) {
return class extends Dog {
name: string;

getName() {
console.info(animal);
}
}
}


Вопрос - как избавиться от return class extends Dog получив запись вида return class extends Dog & Cat

И оказалось так можно сделать, выглядит сложно, но только ощутить прекрасие сего кодирования!

Отвечая на вопрос - а зачем это вообще в production коде:

У вас может быть два класса тестов, например одни проверяют скриншот всей страницы, а другие проверяют ее часть

Вы можете определить два разных базовых класса для тестов, а дальше в тестах использовать их как базовый класс, однако, если вам понадобится написать условный перехватчик для обоих классов, то вам потребуется условное множественное наследование, вот чтобы его избежать вы можете "наследовать налету".

Финальный код в комментариях к данной публикации!

А если хочешь чаще читать наши публикации и быть в курсе вообще всего, то для доступа к нашим публикациям переходи в канал @digitable_blog , а еще разные услуги можно найти в нашем интернет-магазине https://digitable.ru

Ставьте Ваши реакции и задавайте вопросы в комментариях, они помогают стать нам лучше!

Полезные ссылки:

https://github.com/microsoft/TypeScript/issues/4890
GitHub Allow class to extend from a generic type parameter · Issue #4890 · microsoft/TypeScript There appears to be some kind of internal "class" type that is impossible to represent generically: You can see a live version here: http://goo.gl/exBzY6 function IdentifiableSubclass<...
More from @digitable_blog
  1. Oct 8, 2026#speaker #conference #it #development #innopolis #advancedprompting #профессиональныйпромп…
  2. Sep 15, 2026Post #327
  3. Sep 4, 2026#games #steam #novel #casual В стиме сейчас анонсировали выход "Преступление и Наказание"…
  4. Sep 1, 2026#courses #features #calendar #planning #yearplanning На портале courses.digitable.ru появи…
  5. Aug 25, 2026#games #steam #arcade #casual Сегодня вышла в Steam (скоро и в Yandex Games, Ap Store, VK,…
  6. Aug 24, 2026#материалы #обучение #ИИ #llm #courses Зачем учиться, если модель пишет код быстрее вас и…
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 →