背景:JavaScript 中的选项对象
JavaScript 中的一个常见概念是这样的:
function MyLibrary(options) {
if (options.optionA) { /* ... */ }
if (options.optionB) { /* ... */ }
if (options.flagC) { /* ... */ }
}
new MyLibrary({optionA: "foo", flagC: true})
所以基本上我们有一个“选项”对象,其中包含许多可选的属性。
问题:如何与 Kotlin 进行交互?
在 Kotlin 中,我们可能更愿意使用具有默认值的命名参数。但是,我想与使用上述概念的现有 JavaScript 库进行交互。我如何描述和使用 Kotlin 中的那个库?当然,它应该尽可能类型安全。
到目前为止我尝试过的
这是我想出的:
interface Options {
var optionA: String
var optionB: Int
var flagC: Boolean
}
external class MyLibrary(options: Options)
fun myFunWithApply() {
MyLibrary(Any().unsafeCast<Options>().apply {
optionA = "foo"
flagC = true
})
}
这确实有效,它还为选项提供了代码完成,这很棒,虽然它不像原始 JavaScript 那样短,但考虑到它的长度,感觉还可以。但是...有更好的方法吗?没有 有没有办法相处unsafeCast
?