scala.js - 是js.Dictionary正确的“地图”类型

时间:2016-09-26 06:39:24

标签: scala.js

我正在使用scala.js的Twilio Video javascript API,例如,对话API:https://media.twiliocdn.com/sdk/js/conversations/releases/0.13.9/docs/Conversation.html

API使用javascript“Map”对象(它使用new Map()之类的javascript代码创建它们。)

我能在scala.js对象中使用它的唯一方法是使用js.Dictionary,类似于:

@js.native
class TwilioConversation extends js.Object {

  var participants: js.Dictionary[TwilioParticipant] = js.native

这是建模“地图”的正确类型,还是更好的? 当我尝试使用scala Map / mutable.Map时,它失败了一个类强制转换异常。

1 个答案:

答案 0 :(得分:3)

它不完全是正确的类型。正确的类型是js.Map,但目前还不存在。它仍然存在于https://github.com/scala-js/scala-js/pull/2110/files#diff-4937cb9b8e89d2f21babe311012e63a1

的正在进行的公关中

在进入Scala.js之前,你有两个选择:

  • 使用js.Dictionary,只要您需要做的就是使用字符串键和获取/设置值(因为这些操作的公共API对于字典和图)。
  • 在您的代码库中定义JSMap,如下所示:(灵感来自上面链接的PR,但没有引用IterableIterator部分):
import scala.scalajs.js
import js.annotation._

@js.native
@JSName("Map")
class JSMap[K, V] extends js.Object {
  def size: Int = js.native

  def clear(): Unit = js.native

  def has(key: K): Boolean = js.native

  def get(key: K): js.UndefOr[V] = js.native

  def set(key: K, value: V): this.type = js.native

  def delete(key: K): Boolean = js.native
}