【发布时间】:2020-10-01 13:33:21
【问题描述】:
我有一个父类,它需要子类来实现自定义businesslogic() 方法。有不止一个子类,每个子类对应的businesslogic()方法都有不同的类型签名。
父类中有一个通用方法:它的返回值取决于子类的businesslogic()实现。
我确实希望这段代码能证明这一点:
abstract class Parent {
protected name: string;
constructor(name: string) {
this.name = name;
}
protected abstract businesslogic(params?: unknown): unknown;
public setup(params?: unknown): unknown {
// business logic involving `params`
const foo = this.businesslogic(params);
// do something with the result of the business logic
console.log(foo);
// and then return it
return foo;
}
}
class Child1 extends Parent {
businesslogic(c: number): number {
return c + 1;
}
}
class Child2 extends Parent {
businesslogic(c: string): string {
return c;
}
}
const c1 = new Child1("Mirco");
c1.setup(1);
const c2 = new Child2("Isolde");
c2.setup("a");
在这个例子中,这两个子类都实现了一个自定义的businesslogic()——在类型签名方面有所不同。
tsc 似乎将c1.setup(1) 与一般签名Parent.setup(params?: unknown): unknown 进行比较——这是有效的。但我现在正在寻找一种更好的方法,在调用子类的 setup() 方法时,我可以在子类的声明中稍微“覆盖”setup(params?: unknown): unknown 的类型签名,以实现更强的类型约束。
也就是说,我确实相信以下是我想要的:在子类声明中,我想覆盖父类中公共方法的类型签名。 (如何)这可能吗?
我也很欣赏这类问题的更优雅解决方案的指针!
【问题讨论】:
标签: typescript typescript-typings