【发布时间】:2018-06-06 20:57:39
【问题描述】:
我想重写一个方法并向它传递不同的参数类型:
class Base {
public myMethod(myString: string): undefined {
return;
}
}
class Child extends Base {
public myMethod(myNumber: number): undefined {
return super.myMethod(String(myNumber));
}
}
但这会产生打字稿错误:
'Child' 类型中的属性 'myMethod' 不能分配给相同的 基本类型“Base”中的属性。输入'(myNumber:number)=> undefined' 不可分配给类型 '(myString: string) => undefined'。 参数“myNumber”和“myString”的类型不兼容。 类型“字符串”不可分配给类型“数字”。
有没有办法在不产生打字稿错误的情况下做到这一点?
【问题讨论】:
-
你不能,也不应该;你违反了父母的合同和 Liskov 替换原则。
-
你能解释一下你想要完成什么吗?这可能是那些XY situations 之一,您需要解决的问题有一个解决方案,而不是尝试覆盖具有不兼容签名的方法。
-
@jcalz 这只是一种解决方案,其他解决方案仍然适用于我的问题。我只是想知道这是否可行,因为我自己没有找到关于此的文档(但所有示例都使用了这个 Liskov 替换原则)
标签: typescript inheritance class-method