A_A*_*A_A 6 inheritance class-method typescript
我想重写一个方法,并将不同的参数类型传递给它:
class Base {
public myMethod(myString: string): undefined {
return;
}
}
class Child extends Base {
public myMethod(myNumber: number): undefined {
return super.myMethod(String(myNumber));
}
}
Run Code Online (Sandbox Code Playgroud)
但这会产生打字错误:
类型'Child'的属性'myMethod'不能分配给基本类型'Base'的相同属性。类型'(myNumber:number)=> undefined'不能分配给类型'(myString:string)=> undefined'。参数“ myNumber”和“ myString”的类型不兼容。“字符串”类型不可分配给“数字”类型。
有没有一种方法而不会产生打字稿错误?
无法执行此操作*。在TypeScript中,继承隐含了subtyping,因此您不能从基类继承而不是它的有效子类型。
* 从技术上讲,这不是真的,但我不会提及它们,因为它们是您不应该做的骇人听闻的骇客。
正如其他人所提到的,这不是一个好主意,因为您破坏了 Liskov 替换。
您可以轻松做的是提供一个覆盖string和number。这允许您的类仍然可以在需要基类的任何地方使用。
class Base {
public myMethod(myString: string): undefined {
return;
}
}
class Child extends Base {
public myMethod(myNumberOrString: number | string): undefined {
if (typeof myNumberOrString === 'number') {
return super.myMethod(String(myNumberOrString));
} else {
return super.myMethod(myNumberOrString);
}
}
}
Run Code Online (Sandbox Code Playgroud)