在 ScalaJS 中访问嵌套的 属性 个 JS 对象
Access nested property of JS Object in ScalaJS
我正在尝试访问对象内部深处可用的 属性。如何在 scala js 类型安全的方式中做到这一点?
internetMessageId 属性 在 Office 对象上可用,可以通过以下方式以普通 javascript 访问:
Office.context.mailbox.item.internetMessageId
我的 Office 对象的 scala JS 门面:
@js.native
@JSGlobal
object Office extends js.Object {
var initialize:js.Function1[String, _] = js.native
}
如何在 ScalaJs 中为 Office 对象编写 属性 internetMessageId 的访问方法?
嗯,internetMessageId
不是 Office
的 属性。 Office
needs to have 属性 cotnext
, 为它定义一个 @js.native trait Context
facade, 它应该有一个 属性 mailbox
, 你为它定义一个 @js.native trait Context
门面,依此类推,直到到达 @js.native trait Item
,它最终定义了一个 属性 internetMessageId
.
此层次结构的示例特征代码:
@js.native
trait Context extends js.Object {
val mailbox: Mailbox = js.native
}
然后 Office.context.mailbox.item.internetMessageId
实际上是有效的、类型检查的 Scala 代码。
但是,请记住,在定义此类 @js.native
外观时,Scala 编译器会假定您已正确定义它们。所以如果你有例如拼写错误 context
就像我在第一段中所做的那样,您的代码将在运行时失败。所以你的类型安全和你的门面一样好。
所以,如果你只需要访问整个嵌套结构中的这个字段,你可以通过在某处定义一些 getInternetMessageId
方法来节省时间,这将访问非嵌套的深层字段类型安全的方式,使用 js.Dynamic
。它看起来有点奇怪和临时,但那是因为它是。但它不会降低类型安全性。
我的观点是,在处理 JS 提供的对象时,您必须在某处包含 "type-unsafety"。最好将它包含在外观中(选项 1),但有时开销太大。
我正在尝试访问对象内部深处可用的 属性。如何在 scala js 类型安全的方式中做到这一点?
internetMessageId 属性 在 Office 对象上可用,可以通过以下方式以普通 javascript 访问:
Office.context.mailbox.item.internetMessageId
我的 Office 对象的 scala JS 门面:
@js.native
@JSGlobal
object Office extends js.Object {
var initialize:js.Function1[String, _] = js.native
}
如何在 ScalaJs 中为 Office 对象编写 属性 internetMessageId 的访问方法?
嗯,internetMessageId
不是 Office
的 属性。 Office
needs to have 属性 cotnext
, 为它定义一个 @js.native trait Context
facade, 它应该有一个 属性 mailbox
, 你为它定义一个 @js.native trait Context
门面,依此类推,直到到达 @js.native trait Item
,它最终定义了一个 属性 internetMessageId
.
此层次结构的示例特征代码:
@js.native
trait Context extends js.Object {
val mailbox: Mailbox = js.native
}
然后 Office.context.mailbox.item.internetMessageId
实际上是有效的、类型检查的 Scala 代码。
但是,请记住,在定义此类 @js.native
外观时,Scala 编译器会假定您已正确定义它们。所以如果你有例如拼写错误 context
就像我在第一段中所做的那样,您的代码将在运行时失败。所以你的类型安全和你的门面一样好。
所以,如果你只需要访问整个嵌套结构中的这个字段,你可以通过在某处定义一些 getInternetMessageId
方法来节省时间,这将访问非嵌套的深层字段类型安全的方式,使用 js.Dynamic
。它看起来有点奇怪和临时,但那是因为它是。但它不会降低类型安全性。
我的观点是,在处理 JS 提供的对象时,您必须在某处包含 "type-unsafety"。最好将它包含在外观中(选项 1),但有时开销太大。