我有以下示例代码:
//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);
Run Code Online (Sandbox Code Playgroud)
为什么 TypeScript 推断出productto be的返回类型any?Flow 报告了此代码的错误,我相信该错误是正确的。
从 2015 年 6 月 2 日起,就出现了一个关于此问题的问题(递归函数被推断为具有返回类型any),并且该问题已被关闭为“按设计”:
我们简要地制定了一个规范,概述了这一切在理论上是如何工作的,但它并没有付诸实施。
当前的规则是任何在解析其返回类型期间看到自身的函数都是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'
Run Code Online (Sandbox Code Playgroud)
(操场上的代码)
| 归档时间: |
|
| 查看次数: |
649 次 |
| 最近记录: |