【问题标题】:Annotate a class using declaration file? -- TypeScript使用声明文件注释类? -- 打字稿
【发布时间】:2020-05-06 13:40:00
【问题描述】:

我有一个装饰器,它将一个属性添加到类中:

function Service(constructor: any): any {
  constructor.Instance = {};
}

@Service
class MyService {

}

该属性将是staticpublic static Instance: MyService,但我有一堆课程,我无法在每个课程中添加public static Instance: ServiceType。我所做的是:

class BaseService<T> {
  public static Instance: T; // Static members cannot reference class type parameters.ts(2302)
}

@Service
class MyService extends BaseService<MyService> {

}

应该可以,但我得到了Static members cannot reference class type parameters.ts(2302),所以我尝试this

function BaseService<T>() {
  abstract class BaseService {
    public static Instance: T;
  }
  return BaseService;
}

@Service
class MyService extends BaseService<MyService> { // Type '<T>() => typeof BaseService' is not a constructor function type.ts(2507)

}

这也不起作用,所以我想我们可以制作一个声明文件,在其中我们可以将BaseService 类声明为一种类型,但我很困惑如何使用该类型? implements? extends?,但 Type 无法扩展或实现。由于Instance 已经存在于类中,所以我需要用该属性注释类,以便我可以像MyService.Instance 一样访问它,并且我不想在所有类中显式添加。有什么建议吗?

【问题讨论】:

    标签: typescript


    【解决方案1】:

    我选择了另一种方法,这里是link。简而言之,我正在做的装饰器功能有点困难,但现在我有了另一种方法,所以它解决了我的问题。

    【讨论】:

      猜你喜欢
      • 2017-02-16
      • 1970-01-01
      • 2017-09-12
      • 2018-03-11
      • 1970-01-01
      • 2013-08-20
      • 2020-09-12
      • 2018-11-06
      • 2019-02-16
      相关资源
      最近更新 更多