[英]Should the declaration order affect TypeScript type deduction?
似乎 TypeScript 的翻譯器在某種程度上依賴於聲明的順序,至少在重載函數的情況下。
假設我們有 2 維和 3 維向量的類:
class Vector2 {
public get x() : number
public get y() : number
}
class Vector3 {
public get x() : number
public get y() : number
public get z() : number
}
我們有一個重載的 function 接受Vector2
或Vector3
:
function add(a : Vector2, b : number) : Vector2;
function add(a : Vector3, b : number) : Vector3;
根據add()
的哪個簽名首先出現 - 使用Vector2
或Vector3
結果 - 編譯器可能會推斷出不同類型的結果,即使我們將Vector3
作為參數傳遞也是如此。 例如,在與上述相同的順序的情況下,以下代碼:
const r = add(new Vector3, 5)
將返回Vector2
而不是Vector3
。 因此,如果我們將r
的可能類型限制為Vector3
:
const r : Vector3 = add(new Vector3, 5)
代碼不會編譯。
應該是這樣嗎? 因為對我來說,這看起來像是翻譯器的錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.