2016-09-18 53 views

回答

3

安德斯·海爾斯伯格provided以下理由:

是可能的交叉基本類型(例如string & number),但它是不可能的實際創建這樣的類型(比undefined其他)的值。由於這些類型可能源自泛型類型的實例化(這是懶惰地執行的),所以不可能一致地檢測創建類型的操作併發生錯誤。

他還評論說在2015年7月3日:

的交點類型允許構成類型是類型參數。因此,你可以寫

declare function combine<T, U>(obj1: T, obj2: U): T & U; 

這增加了重要的新的表現力,並且使我們能夠更好地模擬現有的JS成語。然而,由於類型參數可以用任何類型參數實例化,所以我們不能預先檢查交集類型是否爲「有效」。相反,我們必須準備好將任何類型和所有類型相交,並將「錯誤」表面化爲沒有值的類型(例如string & number)。你可能會爭辯說,當我們實例化這種類型時,我們應該錯誤,但是在一個多態類型系統中的類型實例化在設計上嚴重延遲(即它發生在「及時」)以避免類型爆炸,並且如果錯誤報告實際上不確定我們走那條路。

相關問題