请考虑以下函数:

function foo(check: boolean){
  if(check){
    return 123;
  }
}

为什么隐式返回类型只有number而不是number | void

堆叠闪光灯:https://stackblitz.com/edit/typescript-jwy5xn?file=index.ts

推荐答案

这里的主要问题似乎是您没有使用the --strictNullChecks compiler option,这是the --strict suite of compiler options的一部分,它或多或少被认为是一组"标准"的类型安全特性,强烈建议您使用它.

如果禁用--strictNullChecks,则认为值nullundefined可分配给所有其他类型,并被它们吸收.任何可能返回numberundefined的操作都将显示为仅返回number.这并不是很好.

如果启用--strictNullChecks,那么您将看到函数的返回类型是union number | undefined,这有望满足您的需求.

(请注意,number | undefinednumber | void不是exactly.但voidundefined之间的关系有些模糊,我认为,与你为什么只看到number没有直接关系,我认为这是真正的问题.如果你想了解更多,你可以看看Why is undefined assignable to void?Why does TypeScript have both `void` and `undefined`?等等.)

Typescript相关问答推荐

脉轮ui打字脚本强制执行图标按钮的咏叹调标签-如何关闭

带有微前端的动态React路由问题

角形标题大小写所有单词除外

如果存在ts—mock—imports,我们是否需要typescpt中的IoC容器

React重定向参数

路由链接不会导航到指定router-outlet 的延迟加载模块

嵌套对象的类型

为什么在leetcode问题的测试用例中,即使我确实得到了比预期更好的解决方案,这段代码也失败了?

我可以使用typeof来强制执行某些字符串吗

将接口映射到交叉口类型

回调函数中的TypeScrip类型保护返回Incorect类型保护(具有其他未定义类型的返回保护类型)

如何键入并类型的函数&S各属性

内联类型断言的工作原理类似于TypeScrip中的断言函数?

如何正确键入泛型相对记录值类型?

从泛型对象数组构造映射类型

递归JSON类型脚本不接受 node 值中的变量

为什么 TypeScript 类型条件会影响其分支的结果?

React HashRouter,单击导航栏时页面重新加载出现问题

为什么我们在条件语句中使用方括号[]?

Typescript,如何从对象的对象中获取分离的类型