小编use*_*621的帖子

在Typescript中:是否有"编译时"方法来获取TypeScript接口中定义的所有属性名称?

我想创建一个通用的TypeScript类,用于渲染(作为HTML列表)实现特定TypeScript接口的对象数组.

例如

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'  
      ...

    }
}
Run Code Online (Sandbox Code Playgroud)

问:获取指定()TypeScript接口中定义的所有属性名称的"编译时"列表的最佳方法是什么?

与C++模板一样,我相信TypeScript可以在"编译时"解析这些泛型,当TypeScript类型信息(如提供给用于实例化特定对象的泛型的接口)随时可用时.

由于可能提供了所有必需的类型信息,我只是好奇是否有可用于访问此信息的TypeScript扩展/工具,以及对'vanilla'Javascript对象的过度运行时过滤 - 由于模糊的继承问题,这可能会有问题(例如,如果运行时,泛型,Javascript(obj.hasOwnProperty(prop))用于过滤属性,则可能会过滤掉所需的TypeScript继承的接口属性).

这种有用的属性内省潜力可以在"编译时"期间使用TypeScript的超类型元数据进行明确解析,而不是在所有这些类型信息被丢弃时尝试在翻译的Javascript中解析此信息.

如果存在标准(TypeScript)方法,我讨厌使用可能不完美的Javascript hack'重新发明轮子'.

真诚地:初学者TypeScript …

generics interface typescript

24
推荐指数
3
解决办法
1万
查看次数

标签 统计

generics ×1

interface ×1

typescript ×1