angular - 我可以在 typescript 中获取通用类型的元数据吗?

标签 angular typescript metadata

我有一个装饰模型类:

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

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

...
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);
  }

并得到错误消息:'T' 仅指一种类型,但在此处用作值。

更新

您能否建议我另一种将初始化数据传递给我的 GridApiService 的方法,女巫应该通过 DI 注入(inject),而不是使用 new 关键字创建?

最佳答案

TypeScript 类型在运行时不存在,除了那些可以通过类装饰器作为元数据发出的类型。通用类型 cannot be emitted Angular DI 不存在。 GridApiService<DepositsModel>除了类型检查之外什么都不重要。

GridApiService之间的联系和一个 DepositsModel应该用类设计来表达,比如继承:

class DepositsGridApiService extends GridApiService {
  Model = DepositsModel;
}

关于angular - 我可以在 typescript 中获取通用类型的元数据吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47167201/

相关文章:

javascript - 我们如何以 Angular 打印字段属性数据

c# - 使用 Angular : Unexpected token P in JSON at position 0 at JSON. 解析下载 .xls 文件(<匿名>)

javascript - 返回可空 Promise 的 TypeScript 函数

node.js - 从 nodeJS 读取 PDF 文档属性

c++ - 如何在 C++ 中将元数据添加到流式 grpc 调用

angular - 当一个对象依赖于另一个对象的数据时处理可观察对象

css - Angular:如何根据需要请求图像以加速加载(使用 ngx-bootstrap)

javascript - 消息: "Could not upload" | Angular Uploading Image With Post

html - Angular 2 限制在控件上触发的事件或 Action 的数量

c# - 错误 : Cannot obtain Metadata from http . .....?wsdl