使用伪联合类型js.Dictionary [js.Any]的编译失败空值

时间:2019-02-08 10:27:52

标签: scala scala.js

为什么下面的语句

type properties = js.Dictionary[js.Any] | Null
val foo: properties = js.Dictionary("a"-> 1)

报告“类型不匹配”的编译错误?

ScalaFiddle.scala:6: error: type mismatch;
found   : js.this.Dictionary[scala.this.Int]
required: ScalaFiddle.this.properties
    (which expands to)  js.this.$bar[js.this.Dictionary[js.this.Any],scala.this.Null]
  val foo: properties = js.Dictionary("a"-> 1)

伪联盟类型 properties 是使用 scala-js-ts-importer 获取的Scala.js外观的一部分。

1 个答案:

答案 0 :(得分:4)

您的问题在于js.Dictionary("a" -> 1)会产生js.Dictionary[Int]

根据定义,js.Dictionary[js.Any] <: js.Dictionary[js.Any] | Null是真实的, 您可以向js.Dictionary[js.Any]提供foo,但js.Dictionary[Int] <: js.Dictionary[js.Any]为假。

要解决此问题,您必须明确定义类型:

val foo: properties = js.Dictionary[js.Any]("a"-> 1)

Try it out!


我希望这会有所帮助。