我遇到了以下问题,我有2个课程,即
class Animal {
public talk() {
console.log('...');
}
}
和
class Dog extends Animal {
public talk(noise: string) {
console.log(noise);
super.talk()
}
}
如您所见,原始的Animal.talk
方法没有参数,并且由于我的应用程序的限制,它没有任何参数,但是扩展它的某些类可以加入附加的noise
参数。由于此参数最初不在Animal上,因此会引发类型错误。因此,我想问一下如何正确处理此问题。
这是一个非常简化的示例,实际用例具有各种类型的noise
,并且我想避免将所有这些都定义为Animal.talk
的可能值,并且理想情况下不要使用任何参数; < / p>
答案 0 :(得分:1)
在这种情况下,Dog必须同时接受talk("string")
和talk()
。如果将Dog传递给带有Animal的函数,则该函数必须能够调用animal.talk()
(否则您违反了substitutability)。这意味着noise
必须是可选的:
class Dog extends Animal {
public talk(noise?: string) {
console.log(noise);
super.talk()
}
}
然后,您只需要处理未通过noise
的情况。 (但这是不可避免的。您将始终不得不处理未通过noise
的情况。)