相关疑难解决方法(0)

JavaScript中的Map vs Object

我刚刚发现了chromestatus.com,在我失去了几个小时之后,发现了这个功能条目:

地图:地图对象是简单的键/值映射.

那让我困惑.常规的JavaScript对象是字典,所以Map与字典有什么不同?从概念上讲,它们是相同的(根据 地图和字典之间的区别是什么?)

文档chromestatus引用也没有帮助:

映射对象是键/值对的集合,其中键和值都可以是任意ECMAScript语言值.不同的键值只能出现在Map集合中的一个键/值对中.使用在创建Map时选择的比较算法区分不同的键值.

Map对象可以按插入顺序迭代其元素.必须使用散列表或其他机制来实现Map对象,这些机制平均提供对集合中元素数量的次线性访问时间.此Map对象规范中使用的数据结构仅用于描述Map对象所需的可观察语义.它不是一个可行的实施模型.

...对我来说仍然听起来像是一个对象,显然我错过了一些东西.

为什么JavaScript获得(受到良好支持的)Map对象?它有什么作用?

javascript dictionary ecmascript-6

242
推荐指数
11
解决办法
7万
查看次数

如何定义具有键类型和值类型之间相关性的 Map,而它们都是并集

这是显示我想要实现的目标的示例。除了两个问题之外,它几乎可以工作:

  1. 设置不显示错误代码的错误
  2. Immer Draft 类型(或任何 DeepWritable 实用程序类型)完全搞乱了这个技巧

基本上在我看来,我在这里所做的事情并不是什么真正的事情。所以问题是:还有其他方法可以做同样的事情吗?

type Opaque<Type, Token = unknown> = Type & {
  readonly __opaque__: Token
}

type AnimalId = CatId | DogId

type Animal = Cat | Dog

type CatId = Opaque<number, Cat>

type Cat = {
  readonly kind: 'Cat'
  readonly id: CatId
}

type DogId = Opaque<number, Dog>

type Dog = {
  readonly kind: 'Dog'
  readonly id: DogId
}

const cat: Cat = {
    kind: 'Cat',
    id: 1 as CatId,
}

const dog: Dog …
Run Code Online (Sandbox Code Playgroud)

typescript

3
推荐指数
1
解决办法
267
查看次数

标签 统计

dictionary ×1

ecmascript-6 ×1

javascript ×1

typescript ×1