Можно ли получить имя типа универсального типа?

У меня есть подпись метода execute<TResult>(): Observable<TResult>

Как получить имя типа TResult?

Пример:

execute<ViewModel> --› ViewModel — это тот результат, который мне нужен.


person Rookian    schedule 15.12.2016    source источник


Ответы (1)


Насколько я знаю, невозможно получить имя TResult, но если вы предоставите соответствующую функцию конструктора, вы можете получить имя.

Декларация:

execute<TResult>(ctor: { new (): TResult }) : <TResult> {
  console.log(ctor.name) //Prints out SomeClass
  return <any>null;
}

Использование:

execute<SomeClass>(SomeClass);
person Rookian    schedule 28.12.2016
comment
Спасибо! Я не совсем уверен, что там происходит. Не могли бы вы рассказать подробнее о части new(): TResult? Мое первое предположение состоит в том, что это создает анонимный класс-конструктор, объединяющий свои свойства в новый объект, к которому мы обращаемся через параметр ctor. - person Michael Kargl; 30.12.2018