在 Kotlin/JS 互操作中 return `dynamic` 的 lambda 的奇怪行为

Strange behaviour of lambdas that return `dynamic` in Kotlin/JS interop

我想编写一个 returns dynamic 以赋值操作结束的 lambda 函数。以下不进行类型检查:

var a: Int?
val f: () -> dynamic = {
    a = 42
}

注意:为了使其最小化,此示例有些人为。实际上,我需要将此 lambda 分配给 XMLHttpRequest.onreadystatechange,因此需要类型。

f 在删除类型注释时具有类型 () -> Unit。为什么不能将 () -> Unit 转换为 () -> dynamic

另外,这个例子怎么会进行类型检查?

val f2: () -> dynamic = {
    print("foo")
}

f2 没有注释也有类型 () -> Unit。为什么 f2 类型检查而 f 没有?

最后,f怎么写才合适呢?也许在末尾添加 Unitnull?那行得通,但看起来很丑陋。有更好的方法吗?

我相信你能找到答案here,因为你的问题看起来与这个主题相似