Kotlin:调用 JavaScript 方法时的扩展运算符

Kotlin: Spread operator on calling JavaScript method

我尝试为 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)

编辑:已经忘记在代码中编写展开运算符“*”。由于展开运算符,编译器 returns 出错。

Kotlin 编译器returns 错误"Can't apply spread operator in dynamic call"。

关于如何实现这样的包装器的任何想法,或者我需要任何解决方法吗?

感谢您的帮助!

使用external fun with @JsModule注释

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

这将在幕后为您 require("library")。您将立即拥有正确的 Kotlin 类型,而不是 dynamic。您将没有 "wrappers",这意味着在运行时没有额外的 JavaScript 调用。


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

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