2017-06-23 30 views
1

如何定義打字稿型與無限的深度陣列

string|string[]|string[][]|string[][][] // ad infinitum 

在打字稿一個類型?

編輯: 的解決辦法是:

type Rec = string | string[] | Rec[] 

但這是不允許的。

這是我用例:

interface RecursiveArray<T> { 
    [index: number]: (RecursiveArray<T> | T); 
} 

type Recursive<T> = T|RecursiveArray<T> 

function stringValue (value: Recursive<string|boolean>): Recursive<string> { 
    if (typeof value === 'boolean') { 
    return value ? 'true' : 'false'; 
    } 
    if (Array.isArray (value)) { 
    return (value).map (stringValue); 
    } 
    return stringValue(value); 
} 
+1

最簡單的答案就是輸入'any',但是輸入不正確。你有沒有試過把它作爲'Array '輸入? – Nieminen

+1

我可以問你一個無限深陣列的用例嗎? –

+0

我可以看到將使圓引用,打字稿自動檢測,有關您使用情況的更多信息,唯一的解決方案可以幫助 – jrmgx

回答

3

您可以創建一個遞歸接口。

interface RecursiveArray { 
    [index: number]: (RecursiveArray | string); 
    length: number; 
} 

let arr: RecursiveArray = []; 
arr[1] = []; 
arr[1][2] = []; 
arr[1][2][2] = "item 122"; 
arr[1][2][3] = "item 123"; 
+0

很好的解決方案,但RecursiveArray沒有length屬性 – user3725805

+0

您可以添加一個length屬性,如果需要。是否回答了問題。 – Rodris