可以覆盖(更改参数)超级 class 方法
Possibility to override (change args) of a super class method
我遇到了以下问题,我有 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
的可能值,理想情况下保持它没有参数;
在这种情况下,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
的情况。)
我遇到了以下问题,我有 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
的可能值,理想情况下保持它没有参数;
在这种情况下,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
的情况。)