【问题标题】:Why TypeScript can not infer type of recursive function为什么 TypeScript 不能推断递归函数的类型
【发布时间】:2016-10-28 04:51:03
【问题描述】:

我有以下示例代码:

//Derived type of sum ([head, ...tail]: number[]) => any
let sum =
    ([head, ...tail]: number[]) => head ? head + sum(tail) : 0
let x: string = sum([1, 2, 3]);
alert(x);

为什么 TypeScript 将 product 的返回类型推断为 any? Flow 报告此code 的错误,我相信这是正确的。

【问题讨论】:

    标签: typescript


    【解决方案1】:

    从 2015 年 6 月 2 日开始,有一个关于此的问题 (Recursive functions are inferred to have return type any),并以“设计”的形式关闭:

    我们简要地制定了一份规范,概述了这一切在理论上如何运作, 但它没有实现。
    当前的规则是,任何在 其返回类型的分辨率是任何。这似乎在 练习,因为总是可以添加所需的类型注释 由于尾调用,大多数函数都不会像这样递归 优化尚未成为 ES 规范的一部分

    所以基本上,只需声明返回类型:

    let sum =
      ([head, ...tail]: number[]): number => head ? head + sum(tail) : 0
    
    let x: string = sum([1, 2, 3]); // Error: Type 'number' is not assignable to type 'string'
    

    (code in playground)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-17
      • 2018-07-24
      • 1970-01-01
      • 2020-01-27
      • 1970-01-01
      • 2019-08-05
      相关资源
      最近更新 更多