Luk*_*tti 9 typescript typescript-typings
我试图Map<String, String>在 Dart 中找到一个等价物,但可以在 Typescript 中使用。这是定义 string:string key:value 存储的快速方法。
此外,这可以像这样使用,这是我的下一个问题:
Map<String, List<String>>
这将定义一个 key:value 存储,其中键是字符串,值是字符串列表。
在打字稿中有什么办法吗?
Dan*_*ker 15
打字稿等价物将是:
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是永久停留在只有两个属性,fruitand spaceship,并且不允许我们添加更多属性。有趣的是,它不会假设任何有关数组长度的信息(即使可以通过元组类型在 TS 中描述此类内容)。
| 归档时间: | 
 | 
| 查看次数: | 37317 次 | 
| 最近记录: |