我正在尝试扩展基类并得到以下错误:
类“derivedProduct”错误地扩展了基类“baseProduct”。
类型具有私有属性“route”的单独声明。
基类:

 export class BaseProduct {
    constructor(private route: ActivatedRoute, private store: Store<fromState>){}
   }

派生类:
export class DerivedProduct extends BaseProduct {
  constructor(private route: ActivatedRoute, private store: Store<fromState>){}
}

为什么我会犯这个错误?

最佳答案

这些字段已经在基类中声明,因此不需要重新声明它们(即不需要指定修饰符)。构造函数参数应该只是派生类中的参数,而不是字段中的参数。您还需要调用super构造函数

export class BaseProduct {
    constructor(private route: ActivatedRoute, private store: Store<fromState>) { }
}

export class DerivedProduct extends BaseProduct {
    constructor(route: ActivatedRoute, store: Store<fromState>) {
        super(route, store)
    }
}

注意,可以使用构造函数参数向字段语法糖添加额外的字段,但基本字段通常不应重新声明。公共字段和受保护字段如果被声明,通常不会引起问题,但不能被声明为私有字段。
如果要从派生类访问这些字段,请在基类中将修饰符更改为protectedpublic
编辑
正如@series0ne指出的,如果构造器没有任何额外的逻辑,则可以将其全部省略,因为它将从基类继承:
export class BaseProduct {
    constructor(private route: ActivatedRoute, private store: Store<fromState>) { }
}

export class DerivedProduct extends BaseProduct {
}
new DerivedProduct(route, store); //Works, also Angular should see it like this as well.

09-17 15:46