У меня есть ситуация, когда существует набор типов: A
, B
и C
. Каждый из них расширяет один и тот же общий интерфейс I
. Я хотел бы иметь возможность выразить метод следующим образом:Создание метода конструктора типа
class SomeClass {
private somenumber = 1;
private someproperty;
addThing(cls: {new(number): I}) {
var instance = new cls(this.somenumber);
instance.someSharedOperation(this.someproperty);
return instance;
}
}
По сути мне нужен метод-конструктора, который будет ассоциировать созданный экземпляр с данными, специфичными для экземпляра, который его создали.
Я бы тогда называть это так:
var maker = new SomeClass();
instanceA = maker.addThing(A);
выше, конечно, работает, но машинопись считает instanceA
быть типа I
. Я бы хотел, чтобы он отражал исходный тип A
при ограничении cls
на реализацию I
. Но я признаю, что это может быть слишком далеко в «зависимом типе», чтобы быть выраженным в TypeScript, даже если тип может быть установлен в.