【发布时间】:2015-07-24 07:37:59
【问题描述】:
我想创建一个通用 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 扩展/工具可用于访问此信息而无需对“vanilla”Javascript 对象进行过多的运行时过滤——这可能是有问题的不明确的继承问题(例如,如果使用运行时、泛型、Javascript (obj.hasOwnProperty(prop)) 来过滤属性,则可能会过滤掉所需的 TypeScript 继承的接口属性)。
这种有用的属性自省潜力可以在“编译时”期间使用 TypeScript 的类型元数据超集明确解决,而不是在所有这些类型信息都被丢弃时尝试在翻译的 Javascript 中解析此信息。
如果存在标准 (TypeScript) 方法,我不希望使用可能不完美的 Javascript hack 来“重新发明轮子”。
【问题讨论】:
-
在运行时它是纯 JavaScript,因此您实际上是在寻找一种 JavaScript 方法来获取所有属性......这在此处得到了回答 stackoverflow.com/questions/85992/…
标签: typescript generics interface