TS 接口不强制对实现者进行函数签名


interface test{
    foo(boo:string);
}
class coo implements test{
    foo(){
    }
}

在操场上尽管功能签名不是接口,但这不会生成和错误说,接口的预期行为是强制签名。

为什么这种行为?

谢谢

这很有趣。打字稿团队非常聪明,他们决定故意这样做。

这个想法是,如果您的函数可以正确操作而无需通过参数,则可以安全地忽略参数并满足界面。这意味着您可以替换实施,而无需更新所有调用代码。

界面确保在您消耗接口的所有情况下通过参数传递 - 因此您可以在呼叫者上进行检查,并且实际上您的混凝土类不需要任何参数。

接口函数参数不执行

我不满足接口如何也不强制执行方法签名。我相信芬顿的解释是错误的。真正的原因是Typescript使用" Duck Typing "。没有更少的参数的erros,但是如果您使用更多参数,您确实会遇到错误。在这里可以找到较长的答案,为什么duck typing typesscript

中允许duck键入

最终,接口无法符合由其他类扩展的抽象类的角色。我不建议将界面与类一起使用,而是更好地使用实际类上的" strampets"

打字稿使用结构键入。实现的函数的参数可能比接口中的函数声明更少,但没有更多。

最新更新