DartでMap<String, String>
に相当するものを見つけようとしていますが、TypeScriptで使用できます。これは、string:string key:valueストアを定義する簡単な方法です。
また、これは次の質問のように使用できます。
Map<String, List<String>>
これは、キーが文字列で値が文字列のリストであるkey:valueストアを定義します。
Typescriptでどちらかを行う方法はありますか?
キーが単なる文字列の場合、TypeScriptでプレーンオブジェクトを使用することをお勧めします。これは、Record<string, string>
と入力できます。
使用例
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[];
}
コンパイラーは、m
がfruit
とspaceship
の2つのプロパティで永続的にスタックしていると想定し、さらに追加することを許可しません。興味深いことに、配列の長さについては何も想定していません(そのようなことをタプル型を介してTSで説明することも可能です)。
TypeScriptはJavascriptのスーパーセットであり、 組み込みのMapクラス があります。これは、String, List<String>
を含む任意のキーと値のペアを取ることができます。 JSにはList
タイプはありませんが、代わりにArray
を使用できます。