У меня возникла проблема, которая определяет общий тип, основанный на типе, в котором я прошел.
У меня есть кусок кода, который активирует класс, я не могу получить информацию о типе из параметра типа, поэтому я передаю объект класса (а не экземпляр). Однако это нарушает вывод типа.
Вот упрощенный пример того, что я пытаюсь сделать:
interface IActivatable {
id: number;
name:string;
}
class ClassA implements IActivatable {
public id: number;
public name: string;
public address:string;
}
class ClassB implements IActivatable {
public id: number;
public name: string;
public age: number;
}
function activator<T extends IActivatable>(type:T): T {
// do stuff to return new instance of T.
}
var classA:ClassA = activator(ClassA);
До сих пор единственным решением, которое я смог придумать, является изменение типа аргумента type
на any
и вручную также установить общий тип (как показано ниже). Однако это кажется длинным, но есть ли другой способ достичь этого.
function activator<T extends IActivatable>(type:any): T {
// do stuff to return new instance of T.
}
var classA:ClassA = activator<ClassA>(ClassA);
Спасибо за любую помощь, которую вы можете дать.