如示例中所示,如果我有一个 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;
Run Code Online (Sandbox Code Playgroud)
这是预期的行为。
另一种思考方式是,返回 void 的回调类型表示“我不会查看您的返回值(如果存在)”。
如果在您的情况下这是可接受的替换,您可能会得到一个返回未定义的类型:
type ReturnsUndefined = () => undefined
type ReturnsNumber = () => number
const a: ReturnsUndefined = () => undefined
const b: ReturnsUndefined = () => { return false; } // error
const c: ReturnsNumber = () => { return false; } // error
Run Code Online (Sandbox Code Playgroud)