Вы можете получить доступ к ссылке на конструктор класса в декораторе класса, свойстве в декораторе свойства (или средства доступа) или параметру в декораторе параметров (используя refle-metadata ).
К сожалению, аргументы универсального типа недоступны во время выполнения таким образом, они всегда будут давать эквивалент времени выполнения простого типа Object
.
Вместо этого вы можете предоставить ссылку на конструктор, которую вытакже можно использовать для вывода универсального типа (т. е. вместо указания универсального типа, вы указываете соответствующую ссылку на конструктор этого универсального типа):
export class BaseService {
public getAll<T>(TCtor: new (...args: any[]) => T): Observable<T> {
// get type of T
const type = typeof(TCtor);
// ...
}
}
И затем используете его следующим образом:
new BaseService().getAll(DataClass); // instead of 'getAll<DataClass>()'
Демонстрация на игровой площадке
Тип new (...args: any[]) => T
просто говорит: новый тип (т.е. класс / конструктор), который возвращает универсальный тип T
(другими словами,соответствующий класс / конструктор для универсального T
типа экземпляра).