Я хотел бы создать общий класс TypeScript для отображения (в виде списка HTML) массива объектов, которые реализуют определенный interface
.
например
class GenericListRenderer<T> {
items: T[];
constructor(listItems: T[], className?: string){
this.items = listItems;
...
}
private getPropertyNames(): string[]{
// What is the best way to access all property names defined in
// TypeScript interface 'T' that was used in this generic?
...
}
render(){
var propNames: string[] = this.getPropertyNames();
// render list with each item containing set of all
// key(prop name)/value pairs defined by interface 'T'
...
}
}
В: что было бы лучшим способом получить список времени компиляции всех имен свойств, определенных в указанном() интерфейсе TypeScript?
Как и шаблоны C++, я полагаю, что TypeScript может разрешать эти обобщенные элементы во время "времени компиляции", когда информация о типе TypeScript (например, интерфейс, предоставленный обобщенному элементу, используемому для создания экземпляра конкретного объекта) легко доступна.
Поскольку вся необходимая информация о типах потенциально предоставляется, мне было просто любопытно, было ли доступно расширение/средство TypeScript для доступа к этой информации без чрезмерной фильтрации во время выполнения "ванильных" объектов Javascript - что может быть проблематично из-за неоднозначных проблем наследования (например, требуемые унаследованные свойства интерфейса TypeScript могут быть отфильтрованы, если для фильтрации свойств используется среда выполнения, generic, Javascript (obj.hasOwnProperty(prop))).
Этот потенциал самоанализа полезного свойства может быть однозначно разрешен с помощью супер-набора метаданных типа TypeScript во время "времени компиляции" против попыток разрешить эту информацию в переведенном Javascript, когда вся эта информация о типах отбрасывается.
Я бы не хотел "изобретать велосипед" с потенциально несовершенным взломом Javascript, если существует стандартный подход (TypeScript).