我正在使用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时,它失败了一个类强制转换异常。
答案 0 :(得分:3)
它不完全是正确的类型。正确的类型是js.Map
,但目前还不存在。它仍然存在于https://github.com/scala-js/scala-js/pull/2110/files#diff-4937cb9b8e89d2f21babe311012e63a1
在进入Scala.js之前,你有两个选择:
js.Dictionary
,只要您需要做的就是使用字符串键和获取/设置值(因为这些操作的公共API对于字典和图)。JSMap
,如下所示:(灵感来自上面链接的PR,但没有引用Iterable
和Iterator
部分):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
}