Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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
Interface TS接口没有';t强制函数在实现者上签名_Interface_Signature_Typescript - Fatal编程技术网

Interface TS接口没有';t强制函数在实现者上签名

Interface TS接口没有';t强制函数在实现者上签名,interface,signature,typescript,Interface,Signature,Typescript,在 虽然函数签名不作为接口,但这不会生成错误 表示,接口的预期行为是强制签名 为什么会有这种行为 谢谢这很有趣。TypeScript团队是非常聪明的家伙,他们决定故意这么做 其思想是,如果您的函数可以在不传递参数的情况下正确运行,那么它可以安全地忽略参数并满足接口要求。这意味着您可以替换实现,而无需更新所有调用代码 接口确保在您使用接口的所有情况下都传递参数,因此您可以对调用方进行类型检查,实际上,您的具体类不需要任何参数并不重要 我不满意接口如何也不强制方法签名。我相信芬顿的解释是错误的。真正

在 虽然函数签名不作为接口,但这不会生成错误 表示,接口的预期行为是强制签名

为什么会有这种行为


谢谢

这很有趣。TypeScript团队是非常聪明的家伙,他们决定故意这么做

其思想是,如果您的函数可以在不传递参数的情况下正确运行,那么它可以安全地忽略参数并满足接口要求。这意味着您可以替换实现,而无需更新所有调用代码

接口确保在您使用接口的所有情况下都传递参数,因此您可以对调用方进行类型检查,实际上,您的具体类不需要任何参数并不重要


我不满意接口如何也不强制方法签名。我相信芬顿的解释是错误的。真正的原因是Typescript使用了“duck typing”。参数少不会有错误,但如果使用更多参数,则会出现错误。详细答案可在此处找到


最终,接口无法适应由其他类扩展的抽象类的角色。我不建议在类中使用接口,但最好在实际的类中使用“implements”一词,它在没有额外接口类的情况下也可以使用。实现的函数的参数可以比接口中的函数声明少,但不能多。

我认为这太明显了,不可能是一个bug。。如果有人有其他答案,我会记下答案。。thanksUpdated基于TypeScript团队的反馈。谢谢,但对我来说,我更愿意进行参数检查以确保正确的实现,可以这样说,如果我在接口中没有函数a(arg1)。。在课堂上让我们说。。除非使用“?”不需要arg1,…
function v(x:number){},否则它在没有arg1的情况下是不可调用的;v();//在play ground中生成错误
Yes-如我所说,调用代码必须遵守类型和接口,即使实现代码选择省略参数。如果希望调用代码能够跳过该参数,则可以将其设置为可选:v(x?:number){}
interface test{
    foo(boo:string);
}
class coo implements test{
    foo(){

    }
}