[英]Using Tuples in TypeScript (Type Inference)
鑒於這個稍微人為的例子:
['List', 'Of', 'Names']
.map((name, index) => [name, index % 2])
.map(([name, num]) => );
為什么string | number
類型的最后一行是 name 和 num? string | number
顯然被推斷為一個字符串和數字數組,你們知道是否有一種方法可以使用類型推斷,以便 name 是一個字符串,num 分別是一個數字嗎?
對於數組文字類型推斷不推斷元組,它推斷數組,所以
var foo = ["", 0]; // foo is Array<string | number> not [string, number]
我還沒有找到這方面的文檔,但是添加對元組支持的拉取請求在聲明它們時從不使用推理,我猜這是故意的。
在您的情況下,您可以指定類型參數:
['List', 'Of', 'Names']
.map<[string, number]>((name, index) => [name, index % 2])
.map(([name, num]) => name + "");
2.9及以下解決方案
或者,如果這對您來說是一個常見問題,則創建一個元組輔助函數:
function tuple<T1, T2, T3, T4, T5>(data: [T1, T2, T3, T4, T5]) : typeof data
function tuple<T1, T2, T3, T4>(data: [T1, T2, T3, T4]) : typeof data
function tuple<T1, T2, T3>(data: [T1, T2, T3]) : typeof data
function tuple<T1, T2>(data: [T1, T2]) : typeof data
function tuple(data: Array<any>){
return data;
}
['List', 'Of', 'Names']
.map((name, index) => tuple([name, index % 2]))
.map(([name, num]) => name + "");
3.0 解決方案
自從我發布了原始答案打字稿以來,它改進了推斷其余參數的元組類型的能力。 有關詳細信息,請參閱PR 。 有了這個特性,我們可以編寫更短版本的tuple
函數:
function tuple<T extends any[]> (...data: T){
return data;
}
['List', 'Of', 'Names']
.map((name, index) => tuple(name, index % 2))
.map(([name, num]) => name + "");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.