Kotlin转换为Javascript错误:“减法不是函数”
将Kotlin代码转换为JavaScript时遇到问题。 每当我使用减法或加法,它将转换为无效的JavaScript代码。
我有一个Kotlin JavaScript项目,配置了Gradle。 编译器被配置为生成输出到commonjs,我创建了一个简单的NodeJS应用程序来执行生成的代码。
原始Kotlin文件:
import kotlin.js.JsName @JsName("testSubtraction") fun testSubtraction(a: Long, b: Long) : Long { return a - b }
生成的输出文件:
module.exports = function (Kotlin) { 'use strict'; var _ = Kotlin.defineRootPackage(null, /** @lends _ */ { testSubtraction: function (a, b) { return a.subtract(b); } }); Kotlin.defineModule('output', _); return _; }(require('kotlin')); //@ sourceMappingURL=output.js.map
执行代码时得到的错误是: TypeError:a.subtract不是函数
我已经使用Kotlin 1.0.5-2和1.1-M03进行了测试,但是它们都转换为同样的问题。
我如何解决这个问题?
到目前为止我发现的解决方法是在我的应用程序中手动定义这个方法,但我不喜欢它:
Number.prototype.subtract = function(a) { return this.valueOf() - a; }
我已经创建了一个示例项目来在GitHub上演示这个问题: https : //github.com/leandro-dev/test_kotlin_js
Kotlin Long
不是JS number
,问题是你用JS编号调用testSubtraction
。
如果你想用JS number
在Kotlin代码中使用Int
。
如果要传递Kotlin所期望的JS number
,请使用Kotlin.Long.fromNumber
或Kotlin.Long.fromInt
来创建Long