为什么下面的语句
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外观的一部分。
答案 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)
我希望这会有所帮助。