如何在Typescript中强制执行构造函数的编译时检查

时间:2018-09-24 13:06:56

标签: typescript inheritance dependency-injection abstract-class aurelia

有没有一种方法可以强制Typescript中构造函数存在的编译时检查? 即。 我有以下课程:

@autoinject
export abstract class HttpServiceBase {
    constructor(private httpClient: HttpClient){}
}

然后有以下课程:

export class UserService extends HttpServiceBase{
    public async getAllUsers():Promise<any>{
        ... this function is not important here
    }
}

@autoinject
export class NewUserViewModel {
    public model:any;
    constructor(private service:UserService){}

     public async activate(){
          return  this.service.getAllUsers()
                .then(result=> this.model = result);
      }
 }

这里的问题是基本抽象类的构造函数带有1个参数,而芽子类没有公开构造函数。因此,当Aurelia尝试从DI容器构造UserService时,我会遇到运行时错误。如果超类本身具有必需的参数,我还没有找到一种方法来告诉编译器在我忘记编写子类构造函数时抛出错误。

更新: 这种情况下可以正常工作:

@autoinject
export class UserService extends HttpServiceBase{
    constructor(httpClient:HttpClient){
        super(httpClient);
    }
    public async getAllUsers():Promise<any>{
    ... this function is not important here
    }
}

但是我有很多这样的服务,还有很多团队成员。因此,编译器应该在很多地方通知基本构造函数隐藏。

0 个答案:

没有答案