[英]Why TypeScript can not infer type of recursive function
我有以下示例代碼:
//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報告此代碼錯誤,我認為是正確的。
從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'
( 操場上的代碼 )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.