TypeScript:伪类型安全的基于字段的依赖注入?

TypeScript: fake type-safe field-based dependecy injection?

我正在努力用 TypeScript 包装 AngularJS 一点。我想做的一件事是合理的依赖注入语法。

一种可能的解决方案是将依赖项显式列为构造函数参数。问题是没有注释,参数名称必须与服务名称匹配,这很烦人。另外每个子class必须列出父的所有参数及其类型,这不是很可扩展。

所以我正在尝试使用这种设计进行基于字段的注入:

class X {
    private scope = inject('$scope');
    private somethingElse = inject(); // Uses field name
}

不幸的是,TypeScript 在构造函数中进行字段初始化(而不是设置原型),因此无法在创建实例之前确定哪些字段需要注入。

我想知道有什么办法解决这个问题吗?

这现在可以使用装饰器巧妙地完成