Мой общий класс
export class BaseService<T> {
public subUrl;
constructor(public repo:RepogitoryService) { }
}
Как сохранить имя класса T в локальной переменной?
Мой общий класс
export class BaseService<T> {
public subUrl;
constructor(public repo:RepogitoryService) { }
}
Как сохранить имя класса T в локальной переменной?
Вы должны понимать, что 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);
Вы не можете, к сожалению. Typescript является статическим средством проверки типов и не поддерживает отображение типов во время выполнения, как это делает Java. Это потому, что его источники перенесены в Javascript.
Тем не менее, есть надежда на такую поддержку в будущем, благодаря новой функции машинописи, которая называется "настраиваемые преобразователи". Эти трансформаторы - это плагины, которые подключают процесс переноса, открывая дорогу к богатым возможностям, связанным с отражением типа. Первый пример этого - ts-transformer-keys
.
Обходное решение durisvk10 охватывает тему, просто хочу добавить, что я бы предпочел использовать x: new() => T
чем x: T&Function
.
Как это:
...
constructor(x : new () => T) {
this.TName = x.name;
}
...
Привести объект к Object
и получить имя конструктора?
function nameOf(object: Object): string {
return object.constructor.name;
}