什么时候需要在 TypeScript 中声明返回函数类型?

Ada*_*son 5 javascript static-analysis typing typescript

如果我有以下基本功能typescript可以自动推断返回类型。

function myFunction(x: number, y: number) {
  return x * y;
}
Run Code Online (Sandbox Code Playgroud)

如果typescript由于某些其他调用正在泄漏any而无法推断返回类型,因此它无法进行正确的推断,那么声明返回类型是否仅有用?

function myFunction(x: number, y: number) {
  return x * y || callThatReturnsAny();
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,如果我知道callThatReturnsAny()返回一个,我想输入它number

function myFunction(x: number, y: number): number {
  return x * y || callThatReturnsAny();
}
Run Code Online (Sandbox Code Playgroud)

虽然最好的解决方案只是输入callThatReturnsAny()以便typescript进行推断?但是在那种情况下,您何时真正应该使用显式返回类型?

Fen*_*ton 7

我打开noImplicitAny并避免在几乎所有情况下添加类型注释,函数除外。为什么?因为我不想在以下情况下意外返回联合类型:

  1. 我忘记返回一个值
  2. 我返回了错误类型的值

例如,如果我从以下几点开始,我的一天就会有所不同:

function example(a: number, b: number) {
Run Code Online (Sandbox Code Playgroud)

对比

function example(a: number, b: number): number {
Run Code Online (Sandbox Code Playgroud)

这是接下来发生的事情......

function example(a: number, b: number) {
    if (a > 5) {
        return 5;
    }

    if (b > a) {
        return 'b';
    }
}
Run Code Online (Sandbox Code Playgroud)

我的返回类型现在是number | string | undefined.

如果我使用返回类型注释,我会得到额外的帮助*。

它可以帮助您返回正确的类型:

错误的返回类型

在严格模式下,它确保你每次都返回一些东西。

缺少返回(严格模式)

*如果您需要额外的帮助,您还可以开启所有严格的功能