我可以在打字稿中获取泛型类型的元数据吗?

时间:2017-11-07 20:51:28

标签: angular typescript metadata

我有一个装饰模型类:

@Api('payments/deposit')
export class DepositsModel {
  public id: number;
  public created_at: Date;
  ...

在角度组件构造函数中,我注入指向使用我的模型类的数据服务:

...
public constructor( 
  private $api: GridApiService<DepositsModel>
...
) {
  this.service = new GridService($api);
  ...
}
...

所以,我的酷组件有一个很酷的服务,巫婆知道它使用的数据类型......

应该知道..

但是如何在GridApiService中获取模型的元数据呢?我试过了:

@Injectable()
export class GridApiService<T>{
  constructor(
    $http: HttpClient,
  ) {
    let api = Reflect.getMetadata('Api', T);
  }

得到错误消息:&#39; T&#39;仅指类型,但在此处用作值。

更新

你能否告诉我另一种将初始化数据传递给我的GridApiService的方法,应该通过DI注入,而不是用new关键字创建?

1 个答案:

答案 0 :(得分:5)

TypeScript类型在运行时不存在,但可以通过类装饰器作为元数据发布的类型除外。 Angular DI存在通用类型cannot be emitted并且不存在。除了类型检查之外,GridApiService并不重要。

DepositsModelclass DepositsGridApiService extends GridApiService { Model = DepositsModel; } 之间的联系应该用类设计来表达,例如继承:

{{1}}