我正在尝试在Dart中找到与Map<String, String>
等效的方法,但可以在Typescript中使用。这是定义string:string键:value存储的快速方法。
另外,可以这样使用,这是我的下一个问题:
Map<String, List<String>>
这将定义一个key:value存储,其中的键是字符串,值是字符串列表。
在Typescript中有什么方法可以做吗?
答案 0 :(得分:3)
等效的打字稿为:
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
这两个属性中,并且不允许我们添加更多属性。有趣的是,它不会假设任何有关数组长度的信息(即使有可能通过元组类型在TS中描述这种情况)。
答案 1 :(得分:1)
Typescript是Javascript的超集,具有built-in Map class。这可以采用任何键/值对,包括String, List<String>
。嗯,JS中没有List
类型,但是您可以改用Array
。
答案 2 :(得分:1)
如果键只是字符串,则您可能希望在TypeScript中使用纯对象,可以将其键入为Record<string, string>
。
Example usage