使用伪联合类型 js.Dictionary[js.Any] 时编译失败 |无效的

Compilation failed when using the pseudo-union type js.Dictionary[js.Any] | Null

为什么会有下面的说法

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

报告"type-mismatch"编译错误?

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[=23= 获得的 Scala.js 门面的一部分].

您的问题在于 js.Dictionary("a" -> 1) 导致 js.Dictionary[Int]

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

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

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

Try it out!


希望对您有所帮助。