假设我们有以下两个组成部分:
export class HeroComponent {
constructor(
public service1: Service1,
public service2: Service2,
) {
// do something
}
}
export class AdvancedHeroComponent extends HeroComponent {
constructor(
public service1: Service1,
public service2: Service2
) {
super(service1, service2);
// do something more
}
}
有什么办法告诉Angular,除了复制粘贴它们之外,基类和扩展类的构造函数的参数是相同的吗?
谢谢!
答案 0 :(得分:2)
以下解决方案通常适用于TS,但不适用于Angular,因为Angular在TS top之上具有额外的编译器转换
您可以在函数参数/参数中使用rest和spread来使其正常工作。您还将需要 for f in Partners:
prob += Partner_vars[f] <= Max[f]
prob += Partner_vars[f] <= Min[f]
预定义类型以从基本构造函数中提取原始参数类型:
Parameters
注意:您不需要在派生类型参数中使用export class HeroComponent {
constructor(
public service1: Service1,
public service2: Service2,
) {
// do something
}
}
export class AdvancedHeroComponent extends HeroComponent {
constructor(
...p: ConstructorParameters<typeof HeroComponent>
) {
super(...p);
// do something more
}
}
修饰符。该字段已经在基本类型上声明,因此多余的public
会重新声明该字段。这实际上可能导致public
或private
字段出现问题。
答案 1 :(得分:1)
您可以提取“更多操作”逻辑并在子类中覆盖:
class IHasApiKey
{
private:
std::string _apiKey = "";
protected:
IHasApiKey(const std::string& apiKey) : _apiKey(apiKey) {}
// tbo, I'm not quite sure about how to optimally write this one,
// but the idea is the same: provide protected read access.
const std::string& GetKey() { return const_cast<std::string&>(_apiKey); }
};
export class HeroComponent {
constructor(
public service1: Service1,
public service2: Service2,
) {
// do something
this.doSomethingMore();
}
protected doSomethingMore() {}
}