scala.js – 将case类转换为js.Object的最佳方法
发布时间:2020-12-16 08:55:27 所属栏目:安全 来源:网络整理
导读:说我有一个案例类: case class Name(first: String,last: String)val n1 = Name("John","Doe")val n2 = Name("Mary","Doe") 我有一个java脚本对象: @js.nativetrait MyJSObject extends js.Object { def add(name: js.Object): Unit = js.native } 这样的
说我有一个案例类:
case class Name(first: String,last: String) val n1 = Name("John","Doe") val n2 = Name("Mary","Doe") 我有一个java脚本对象: @js.native trait MyJSObject extends js.Object { def add(name: js.Object): Unit = js.native } 这样的名称应该是格式 {"first":"John","last":"Doe"} 将我的case对象转换为js.Object的最佳方法是什么? 我知道这可以通过upickle.write()将其转换为json String来实现,所以我想我的问题是这是最好的方法吗? 解决方法
如果你控制case类,你可以只添加@JSExportAll注释:
@JSExportAll case class Name(first: String,last: String) 这将创建名为first和last的属性.请注意,这与简单对象不同.但是,根据add方法的作用,它足够了(并且比转换为JSON并再次解析更轻量级). 如果您需要交叉编译案例类,可以在JVM项目中包含scalajs-stubs库.它将提供虚拟注释(不会写入.class文件). 如果需要js.Object,可以使用export typechecker: val x = Name("foo","bar") js.use(x).as[js.Object] 这甚至可以使用定义所需字段的特征: @js.native trait Options extends js.Object { def first: String = js.native def last: String = js.native } val x = Name("foo","bar") js.use(x).as[Options] 如果类型之间存在不匹配,则js.use(x).as调用将失败(即,如果Options定义了Name未定义的字段). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- bash – 如何按特定顺序生成包含扩展的列表?
- .NET Custom Attribute Learning and Practice
- 用docker-compose填充docker-machine
- angularjs – 在v1.0.8中弃用$dialog注入
- twitter-bootstrap – Jumbotron对齐问题
- anglejs – 角度指令 – 元素或属性?
- scala – Parboiled2导致“在加载类文件’Prepender.class’
- Angular 4错误:有多个模块的名称只有外壳不同
- 关于在我的虚拟shell中使用fork()和子进程的后台进程
- 用val重写def的Scala抛出NPE
推荐文章
站长推荐
热点阅读