【发布时间】:2021-07-08 16:31:09
【问题描述】:
在示例中,如果我有一个 void 函数的类型定义,则返回布尔值的函数会通过该类型检查。
这是一个错误还是有正当理由?有解决办法吗?
type ReturnsVoid = () => void
type ReturnsNumber = () => number
const a: ReturnsVoid = () => { }
// Surprisingly there is no error
const b: ReturnsVoid = () => { return false; }
// Error - expected
const c: ReturnsNumber = () => { return false; }
// Error - expected
const d: void = false;
【问题讨论】:
-
是的,有点。根据该答案,返回 void 的表达式可以具有任何返回值。似乎唯一的解决方案是不使用这样的表达式类型(并始终在函数定义本身中定义返回类型)。
-
我的用例是我正在使用工厂模式构建一个模块,并且我希望工厂中的函数与接口定义相匹配。我通过在所有函数实现中使用
ReturnType<MyInterface['functionName']>作为返回类型解决了这个问题。
标签: typescript