我有以下示例代码:
//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的错误,我认为这是错误的。
答案 0 :(得分:4)
从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'