![](/img/trans.png)
[英]Why doesn't typescript warn about the return type in this function?
[英]Why Typescript return type void in interface doesn't trigger error in implementation?
我正在 Typescript 操场上尝试两个不同的类,它们实现了相同的接口。 我不明白为什么接口中返回类型为void
的方法speak()
不会触发错误,如果它的实现返回 void 以外的内容。
我必须用返回类型void
显式实现该方法来触发类型检查。 对于void
以外的返回类型,这似乎不会发生,如下所示。
interface Person {
speak(): void;
walk(): number;
}
export class HumanOne implements Person {
speak() {
return 'Hello'; // No type error
}
walk() {
return 'Walking'; // Type error
}
}
export class HumanTwo implements Person {
speak(): void {
return 'Hello'; // Type error
}
walk(): number {
return 'Walking'; // Type error
}
}
没有显式类型声明的方法的推断类型是HumanOne.speak(): string
。 这与void
兼容,它有两个含义:
void
的 function 实现中,这意味着它不返回任何内容,或多或少等同于将undefined
指定为返回类型。void
表示可以返回任何内容,并且不能使用调用的返回值。 就类型兼容性而言,它或多或少等同于unknown
(但与unknown
不同,您不能真正传递void
类型的值)。 这第二个含义也与HumanOne implements Person
的子类型检查相关 - type () => string
是子类型(或:可分配给) type () => void
。 如果调用Person.speak()
,则必须忽略返回值(它可能是undefined
、字符串或其他任何东西); 如果你打电话给HumanOne.speak()
你会知道你得到了一个字符串。
这在很大程度上是设计使然,请参阅有关返回类型 void的文档和常见问题解答条目“为什么返回非 void 的函数可分配给 function 返回 void? ” 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.