web-dev-qa-db-ja.com

Map <String、String> DartはTypescriptで同等ですか?

DartでMap<String, String>に相当するものを見つけようとしていますが、TypeScriptで使用できます。これは、string:string key:valueストアを定義する簡単な方法です。

また、これは次の質問のように使用できます。

Map<String, List<String>>

これは、キーが文字列で値が文字列のリストであるkey:valueストアを定義します。

Typescriptでどちらかを行う方法はありますか?

4
Luke Pighetti

キーが単なる文字列の場合、TypeScriptでプレーンオブジェクトを使用することをお勧めします。これは、Record<string, string>と入力できます。
使用例

4
Ebuall

TypeScriptで同等のものは次のようになります。

const m = new Map<string, string[]>();
m.set("fruit", ["Apple", "banana"]);

ご了承ください string[]は「文字列の配列」タイプです。名前は動的に拡張可能な文字列のリストです(多くの一般的な静的型付け言語の固定長配列とは異なります)。

Array<string>代わりに、これはおそらくあまり広く使用されていません。

キーが文字列の場合、JSオブジェクトを使用する方が便利な場合があります。 JSのオブジェクトは、基本的に文字列キーを持つマップです。 TSの例は次のようになります。

type StringToArrayOfStrings = { 
    [name: string]: string[] 
};

const m: StringToArrayOfStrings = {};
m["fruit"] = ["Apple", "banana"];

type宣言では、インデックス付け演算子[...]。 (数字キーと文字列キーを同時に持つことができます。)

[〜#〜]更新[〜#〜]

プレーンオブジェクトを引き続きマップとして使用していますが、型に名前を付けるためにtype宣言を使用する必要がないことに注意してください。型宣言はインプレースで置き換えることができ、互換性のあるオブジェクトでmをすぐに初期化できます。

const m: { [name: string]: string[] } = {
    "fruit": ["Apple", "banana"],
    "spaceship": ["orion", "apollo"]
};

mの型注釈を省略すると、

const m = {
    "fruit": ["Apple", "banana"],
    "spaceship": ["orion", "apollo"]
};

次に、mのタイプがより制限的であると推測されます。

{
    fruit: string[];
    spaceship: string[];
}

コンパイラーは、mfruitspaceshipの2つのプロパティで永続的にスタックしていると想定し、さらに追加することを許可しません。興味深いことに、配列の長さについては何も想定していません(そのようなことをタプル型を介してTSで説明することも可能です)。

5

TypeScriptはJavascriptのスーパーセットであり、 組み込みのMapクラス があります。これは、String, List<String>を含む任意のキーと値のペアを取ることができます。 JSにはListタイプはありませんが、代わりにArrayを使用できます。

1
Mike Lischke