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

Ant*_*gov 2 metadata typescript angular

我有一个装饰模型类:

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

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

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

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

应该知道..

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

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

并得到 错误消息:'T'仅引用类型,但在此处用作值.

UPDATE

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

Est*_*ask 6

TypeScript类型在运行时不存在,但可以通过类装饰器作为元数据发布的类型除外.Angular DI 不能发出通用类型,也不存在通用类型.GridApiService<DepositsModel>除了类型检查之外什么都不重要.

GridApiService和之间的连接DepositsModel应该用类设计来表达,例如继承:

class DepositsGridApiService extends GridApiService {
  Model = DepositsModel;
}
Run Code Online (Sandbox Code Playgroud)