Как получить общий класс <t> имя машинописного текста?

Мой общий класс

 export class BaseService<T> {
 public subUrl;
 constructor(public repo:RepogitoryService) { }
}

Как сохранить имя класса T в локальной переменной?

Ответ 1

Вы должны понимать, что Typcript - это просто транспилятор (компилятор для javascript). Некоторые синтаксические сахара (например, дженерики) работают только на этапе проверки типов (а также полезны для intellisense в вашем IDE/текстовом редакторе).

Однако присваивание переменной происходит во время выполнения, во время выполнения это просто простой Javascript. Во время выполнения нет типов и никаких дженериков.

Но здесь самый простой способ сделать это:

class Some<T> {
    private TName : string;
    constructor(x : T&Function) {
        this.TName = x.name;
    }
}

class Another {

}

const some = new Some<Another>(Another);

Ответ 2

Вы не можете, к сожалению. Typescript является статическим средством проверки типов и не поддерживает отображение типов во время выполнения, как это делает Java. Это потому, что его источники перенесены в Javascript.

Тем не менее, есть надежда на такую поддержку в будущем, благодаря новой функции машинописи, которая называется "настраиваемые преобразователи". Эти трансформаторы - это плагины, которые подключают процесс переноса, открывая дорогу к богатым возможностям, связанным с отражением типа. Первый пример этого - ts-transformer-keys.

Ответ 3

Обходное решение durisvk10 охватывает тему, просто хочу добавить, что я бы предпочел использовать
x: new() => T чем x: T&Function.

Как это:

...
constructor(x : new () => T) {
    this.TName = x.name;
}    
...

Ответ 4

Привести объект к Object и получить имя конструктора?

function nameOf(object: Object): string {
    return object.constructor.name;
}