如何为抽象类创建抽象构造函数?
例如,如果我有这个抽象类:
export abstract class Foo<T> extends Bar<T> {
constructor(someParam: any) {
super();
this.someObj = someParam;
}
}
然后它被这个类消耗:
export class FooImpl extends Foo<SomeType> {
}
如果我不重写构造函数,则将使用默认的无参数构造函数FooImpl
类,这将导致类内出现不正确的状态。
如何定义抽象构造函数或强制抽象类的使用者在以下情况下重写构造函数:Foo<T>
被消耗了?
EDIT
我的确切代码如下,看起来这与 vscode 有某种关系
export abstract class FireStoreDataSource<T> extends DataSource<T> {
constructor(store: () => Observable<T[]>) {
super();
}
}
然后我将这个类扩展如下
export class AssessmentCenterDataSource extends FireStoreDataSource<AssessmentCenter> {
}
然后在角度组件中创建一个实例ngOnInit
ngOnInit() {
this.dataSource = new AssessmentCenterDataSource(() => this.service.getData());
}
在 vscode 中我收到编译器错误[ts] Expected 0 arguments, but got 1.
,但是当我跑步时ng build
它确实构建正确
如果我没有将任何内容传递给构造函数,那么编译器错误就会消失,并且在运行时会出现错误ng build
这是error TS2554: Expected 1 arguments, but got 0.
所以看来这可能是 vscode 或我安装的插件之一的问题,而不是打字稿的问题
我正在使用 vscode insiders 1.26.0 和 typescript insiders 3.0.1 以及 Angular 6