【问题标题】:TypeScript - function that returns boolean passes as a void functionTypeScript - 将布尔值作为 void 函数返回的函数
【发布时间】: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;

Playground

【问题讨论】:

  • 是的,有点。根据该答案,返回 void 的表达式可以具有任何返回值。似乎唯一的解决方案是不使用这样的表达式类型(并始终在函数定义本身中定义返回类型)。
  • 我的用例是我正在使用工厂模式构建一个模块,并且我希望工厂中的函数与接口定义相匹配。我通过在所有函数实现中使用ReturnType<MyInterface['functionName']> 作为返回类型解决了这个问题。

标签: typescript


【解决方案1】:

这是intended 的行为。

另一种思考方式是返回 void 的回调类型表示“我不会查看您的返回值,如果存在的话”。

如果在你的情况下这是一个可接受的替换,你可能有一个返回 undefined 的类型:

type ReturnsUndefined = () => undefined

type ReturnsNumber = () => number

const a: ReturnsUndefined = () => undefined

const b: ReturnsUndefined = () => { return false; } // error

const c: ReturnsNumber = () => { return false; } // error

playground link

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-28
    • 2021-10-29
    • 2013-03-11
    • 1970-01-01
    • 2019-02-27
    • 2017-06-07
    • 2011-07-22
    • 1970-01-01
    相关资源
    最近更新 更多