簡體   English   中英

為什么TypeScript無法推斷遞歸函數的類型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM