Материал Каким образом заставить класс расширить поведение обобщенного класса? Или как…
0%

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

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

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

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

Оригинал в Telegram

Нашли неточность? Выделите фрагмент текста — рядом появится жучок.

Нужен разбор именно вашей ситуации?

Статья описывает общий случай. Если у вас частный — можно разобрать его отдельно, платно. А если не хватает целого материала, предложите тему: её оплачивают вскладчину, и она выходит открытой для всех.

Доска запросов