gpt4 book ai didi

javascript - 为什么接口(interface)中的 Typescript 返回类型 void 不会在实现中触发错误?

转载 作者:行者123 更新时间:2023-12-05 00:31:23 26 4
gpt4 key购买 nike

我正在 Typescript 游乐场中尝试两个不同的类,它们实现了相同的接口(interface)。我不明白为什么一个方法speak()void如果接口(interface)的实现返回 void 以外的内容,则接口(interface)中的返回类型不会触发错误。
我必须使用返回类型 void 显式实现该方法触发类型检查。对于 void 以外的返回类型,这似乎不会发生。 , 如下所示。
Snippet in Typescript Playground

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 的函数实现中, 这意味着它不返回任何东西,或多或少等同于指定 undefined作为返回类型。
  • 在函数类型声明中,void表示可以返回任何东西,并且不能使用调用的返回值。它或多或少等同于 unknown就类型兼容性而言(但与 unknown 不同,您不能真正传递 void 类型的值)。

  • 这第二个含义也与 HumanOne implements Person 的子类型检查相关。 - 类型 () => string是子类型(或:可分配给)类型 () => void .如果您调用 Person.speak() ,您必须忽略返回值(它可能是 undefined 、字符串或其他任何内容);如果您调用 HumanOne.speak()你会知道你得到了一个字符串。
    这在很大程度上是设计使然,请参阅 the docs on Return typevoidFAQ entry "Why are functions returning non-void assignable to function returning void?" .

    关于javascript - 为什么接口(interface)中的 Typescript 返回类型 void 不会在实现中触发错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70546619/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com