使用 Map 与 Record 之间以及何时使用的差异

Mic*_*ith 18 typescript

我正在尝试将一些使用 Map 的 Java 代码映射到 Typescript 代码。我最初的想法是在 Typescript 中使用 Map,但是对于我创建的界面,这没有用。相反,我发现 Records 似乎完美地模拟了 Java 的 Map。

我的主要问题是我什么时候应该在 Records 上使用 Typescript 的 Maps,什么时候应该在 Maps 上使用 Typescripts Records?

它们的工作方式有何不同?

viewMappings: Record<string, String[]>;
viewMappings: Map<String, String[]>;
Run Code Online (Sandbox Code Playgroud)

例如

我希望这些可以在与我所在州非常相似的界面中工作,但他们没有,我正在寻找两者差异的文档。

Avi*_*ish 12

记录定义为

type Record<K extends keyof any, T> = {
    [P in K]: T;
}
Run Code Online (Sandbox Code Playgroud)

WhileMap是原生的 JS ES6 数据结构。Record 只是一种代表性的说法,“这个对象将被用作特定数据类型的键值映射”。它是一个使用{}. Map另一方面,对象具有这里描述的一些独特特征,需要实例化为new Map()


小智 9

对我来说,重要的区别在于,使用 Record 键查找不会选择性地返回 undefined,这在我知道键不能丢失时简化了我的代码。

  • 这不是真的。记录的未知属性也会返回“未定义”,就像地图的未知值一样,[请参阅此 TS Playground](https://www.typescriptlang.org/play?#code/G4QwTgBARuBcECUCmBjA9mAJgHgM4BcwBLAOwHMAaCEgVwFsokwA+CAXggG8AoCCAMzRp4AJm4BfANzd0JXGgA2SAHQK0ZABQ wwywWgCU02fKWr1W8MpC5M-Q9xlo5+CHRAAHAIztqSAO4QALIeGvZuXsq4SPgaAOQgsVSeYR6ekdFxUIkQIvbGiipqmuFpZBkARCDl+vqOcgVmxanKZTHlAF7V +kA) (11认同)

Eve*_*ert 6

这个问题有很多(正确的!)答案,但没有关于何时使用的指南。

Record(或常规对象)通常会更快,并且对于应用程序内部的任何内容来说都是一个不错的选择。特别是对于您知道会出现哪种键的情况。

Map如果您想要非字符串键(包括数字和对象),则更好。它也更适合用户输入,因为它不会遇到相同的原型污染问题。