2017-10-14 30 views

回答

1

不。作爲@AsadSaeeduddin說,這個請求在Microsoft/TypeScript#6229跟蹤。

如果你真的想要他們,你可以定義自己的「封閉」的元組:

interface Closed1<T> { 0: T }  
interface Closed2<T, U> extends Closed1<T> { 1: U } 
interface Closed3<T, U, V> extends Closed2<T, U> { 2: V } 
interface Closed4<T, U, V, W> extends Closed3<T, U, V> { 3: W } 
// as many as you like ... 

function closeTuple<T, U, V, W>(open: [T, U, V, W]): Closed4<T, U, V, W>; 
function closeTuple<T, U, V>(open: [T, U, V]): Closed3<T, U, V>; 
function closeTuple<T, U>(open: [T, U]): Closed2<T, U>; 
function closeTuple<T>(open: [T]): Closed1<T>; 
function closeTuple(open: any): any { 
    return open; 
} 

function openTuple<T, U, V, W>(closed: Closed4<T, U, V, W>): [T, U, V, W]; 
function openTuple<T, U, V>(closed: Closed3<T, U, V>): [T, U, V]; 
function openTuple<T, U>(closed: Closed2<T, U>): [T, U]; 
function openTuple<T>(closed: Closed1<1>): [T]; 
function openTuple(closed: any): any { 
    return closed; 
} 

// demo usage  
const anOpenTuple: [string, boolean, number] = ['foo', true, 2]; 
const okay = anOpenTuple[2]; // number 
const what = anOpenTuple[10]; // string | number | boolean 
const aClosedTuple = closeTuple(anOpenTuple); 
const stillOkay = aClosedTuple[2]; // number 
const nowError = aClosedTuple[10]; // error if you have noImplicitAny on 

然後你就可以當你需要打開和關閉元組之間的轉換。然而,一旦你開始了這條道路,你可能會發現,最好是創建具有特定命名屬性的接口,而不是完全依賴元組。但你的里程可能會有所不同

希望有幫助;祝你好運。

相關問題