2017-06-23 11 views
1

どのように私はtypescriptですで活字タイプ

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

必要です。答えにしました。 – Rodris

関連する問題