为什么我总是在此处获取 Not all code paths return 值?

Why do I keep getting Not all code paths return a value here?

我想了解为什么我总是从打字稿中收到此错误。

PS。我知道在这种情况下我只会使用布尔值而不是创建函数,这个问题更多是关于打字稿的。

并非所有代码路径return一个值。

代码:

const isCompleted = (completed: boolean) => {
  if(completed) {
    return true
  } else if(!completed) {
    return false
  }
}

当我这样做时,我没有收到错误,但无论如何我都不应该收到错误。

const isCompleted = (completed: boolean) => {
  if(completed) {
    return true
  } else {
    return false
  }
}

原因是每次使用conditional,它都会将当前执行分支到两个可能的分支(代码路径)。

第一个条件 if (completed) {...} 分叉到您 return true 所在的路径和另一条路径(其余行)。下一个条件 else if (!completed) {...} 分叉成另外两条路径:一条是你 return false,另一条是你永远不会 return 任何值(在 JavaScript 中,这隐含地 returns undefined).

作为人类,您可以阅读代码并看到每个条件中的表达式都是相同的值:completed(这是一个 boolean,只能有两个状态),以及您了解代码没有其他可能的路径,但 TypeScript 编译器当前不会推断出这种相同的关系,因此您必须更明确地说明您使用条件创建的代码路径。