Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 重写(更改参数)超类方法的可能性_Typescript_Inheritance_Parent Child - Fatal编程技术网

Typescript 重写(更改参数)超类方法的可能性

Typescript 重写(更改参数)超类方法的可能性,typescript,inheritance,parent-child,Typescript,Inheritance,Parent Child,我遇到了以下问题,我有两个班,即 class Animal { public talk() { console.log('...'); } } 及 正如您所看到的,原始的Animal.talk方法没有参数,并且由于我的应用程序的限制,它不能有任何参数,但是一些扩展它的类可以接受额外的noise参数。这会引发类型错误,因为此参数最初不在Animal上。因此我想问一下如何正确处理这个问题 这是一个非常简单的例子,实际用例有各种类型的噪音,我希望避免将所有这些定义为动物的可能值 在这

我遇到了以下问题,我有两个班,即

class Animal {
  public talk() {
    console.log('...');
  }
}

正如您所看到的,原始的
Animal.talk
方法没有参数,并且由于我的应用程序的限制,它不能有任何参数,但是一些扩展它的类可以接受额外的
noise
参数。这会引发类型错误,因为此参数最初不在Animal上。因此我想问一下如何正确处理这个问题


这是一个非常简单的例子,实际用例有各种类型的
噪音
,我希望避免将所有这些定义为
动物的可能值

在这种情况下,狗必须同时接受
talk(“字符串”)
talk()
。如果将狗传递给接收动物的函数,则该函数必须能够调用
Animal.talk()
(否则您就违反了)。这意味着噪声必须是可选的:

class Dog extends Animal {
  public talk(noise?: string) {
    console.log(noise);
    super.talk()
  }
}

然后,您只需要处理
噪声
未通过的情况。(但这是无法避免的。您将始终必须处理
噪音
未通过的情况。)

为什么不使用talk(可选?:未知):void?可以完成,仍然会对未使用的arg发出警告,希望避免出现这种情况,但如果没有建议答案,则必须使用它并添加ts disable注释,我猜
class Dog extends Animal {
  public talk(noise?: string) {
    console.log(noise);
    super.talk()
  }
}