Извините за странное название, я не совсем знаю, как описать то, что я пытаюсь сделать, в одном предложении.
Я должен определить кучу классов, которые будут расширяться от этого одного класса, а также реализовывать этот другой класс.
class SoulCoughing extends Super implements BonBon { /.../ }
class MoveAside extends Super implements BonBon { /.../ }
class LetTheManGoThru extends Super implements BonBon { /.../ }
Я написал своего рода функцию-оболочку, которую использую в качестве декоратора для этих классов.
const Eminem = function(klass: Constructable<????>) {
const instance = new klass();
// Do stuff
}
Constructable
— это небольшой интерфейс, который я использую, потому что в противном случае TypeScript выдавал бы ошибку об отсутствии конструктора.
interface Constructable<T> {
new(): T;
}
Теперь вот моя проблема, я не знаю, какой тип присвоить параметру klass
в моей функции-оболочке? Я пытался сделать это:
... function(klass: Contrusctable<Super & BonBon>)
и это:
... function(klass: Contrusctable<Super | BonBon>)
Я также попытался изменить свой конструируемый интерфейс следующим образом:
interface Constructable<T, U> {
new(): T & U;
}
... function(klass: Contrusctable<Super, BonBon>)
но я продолжаю получать ошибку Argument of type 'typeof SoulCoughing' is not assignable to parameter of type 'Constructable<everythingIveTriedSoFar>'
.
Итак, мой вопрос: какое определение типа следует использовать с параметром klass
? Я знаю, что могу просто использовать any
, но мне бы очень хотелось убедиться, что передаваемый класс расширил Super
и реализовал BonBon
.