Kotlin:传播运算符调用JavaScript方法

时间:2019-01-17 11:50:17

标签: kotlin kotlin-js-interop kotlin-js

我尝试为JavaScript库编写类型安全的包装器。 我需要使用可变参数从JavaScript调用方法 (例如method(args...))。 Kotlin的乐趣也应该与可变参数一起使用。 因为Kotlin支持散布运算符,所以我尝试使用它,但是Kotlin不想这样做。

示例代码:

val jsLibrary: dynamic = require("library") // library given by node's require here
fun method(vararg args: String) = jsLibrary.method(*args)

编辑:已经忘记在代码中写入扩展运算符'*'。编译器由于使用了传播运算符而返回错误。

Kotlin编译器返回错误“无法在动态调用中应用传播运算符”。

任何想法如何实现这样的包装,还是我需要任何解决方法?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

external fun@JsModule批注一起使用

@JsModule("library")
external fun method(vararg args: String): LibraryMethodReturnType

这将为您提供require("library")的帮助。您将立即拥有正确的Kotlin类型,而不是dynamic。您将没有“包装器”,这意味着在运行时不会进行任何额外的JavaScript调用。


如果您要手动使用requiredynamic类型,则有一个解决方案:使用apply方法将所有参数作为数组传递。

val jsLibrary: dynamic = require("library")
fun method(vararg args: String) = jsLibrary.method.apply(null, args)