2016-11-17 77 views
1

我正在學習TypeScript,所以請接受我的道歉問一個愚蠢的問題。數組解構不能與參數一起工作

下面的代碼取自official docs,但它不起作用。它看起來像函數需要2個number s的Tuple代替Array,但在另一方面,它應該拆解可根據文檔演示陣...

let input = [1, 2]; 
function f([first, second]: [number, number]) { 
    console.log(first); 
    console.log(second); 
} 
f(input); 

錯誤:

src/main.ts(6,3): error TS2345: Argument of type 'number[]' is not assignable to parameter of type '[number, number]'. 
    Property '0' is missing in type 'number[]'. 

回答

2

看起來這個例子確實是錯誤或過時的,或者它可能是打字稿編譯器中的一個錯誤。你是對的,[number, number]tuple type,並且input的類型被推斷爲number[],也就是說,數組的長度沒有被保存在該類型中,並且你得到錯誤消息,因爲f需要一個恰好2個元素的數組。

如果調用f與文字排列,將工作

f([1, 2]); // ok 

您還可以,如果你聲明參數作爲數組它的工作:

let input: number[] = [1, 2]; 
function f([first, second]: number[]) { 
    console.log(first); 
    console.log(second); 
} 

f(input); 

,但它不會被檢查數組長度這些調用也會編譯:

f([]); 
f([1, 2, 3]); 
0

@gamliela,要添加一個變量重刑@artem的迴應,這是最好的排在首位正確定義的元組類型:

let input:[number,number] = [1, 2]; 
let [first, second] = input; 

這樣的TS2345預警:

f(input) 

就會消失。

注意,如果您將doc示例按原樣複製到操場上,它將顯示相同的TS2345警告,除非您在上面添加適當的元組類型定義。