Динамический тип
Несмотря на то что Kotlin — язык со статической типизацией, он должен взаимодействовать с нетипизированными или слабо типизированными средами, такими как экосистема JavaScript. Чтобы упростить эти сценарии использования, в языке доступен тип dynamic:
val dyn: dynamic = ...
Тип dynamic по сути отключает проверку типов в Kotlin:
Значение типа
dynamicможно присвоить любой переменной или передать в качестве параметра куда угодно.Любое значение можно присвоить переменной типа
dynamicили передать функции, принимающейdynamicв качестве параметра.Для значений типа
dynamicпроверкиnullотключены.
Самая необычная особенность dynamic заключается в том, что мы можем вызывать любое свойство или функцию с любыми параметрами у переменной типа dynamic:
dyn.whatever(1, "foo", dyn) // 'whatever' is not defined anywhere dyn.whatever(*arrayOf(1, 2, 3))
На платформе JavaScript этот код будет скомпилирован «как есть»: dyn.whatever(1) в Kotlin превращается в dyn.whatever(1) в сгенерированном коде JavaScript.
При вызове функций, написанных на Kotlin, для значений типа dynamic учитывайте преобразование имён, выполняемое компилятором Kotlin в JavaScript. Возможно, вам потребуется использовать аннотацию @JsName, чтобы назначить функциям, которые нужно вызвать, заранее определённые имена.
Динамический вызов всегда возвращает dynamic, поэтому такие вызовы можно свободно объединять в цепочки:
dyn.foo().bar.baz()
При передаче лямбды в динамический вызов все её параметры по умолчанию имеют тип dynamic:
dyn.foo {
x -> x.bar() // x is dynamic
}
Выражения со значениями типа dynamic преобразуются в JavaScript «как есть» и не используют соглашения об операторах Kotlin. Поддерживаются следующие операторы:
бинарные:
+,-,*,/,%,>,<>=,<=,==,!=,===,!==,&&,||-
унарные
префиксные:
-,+,!префиксные и постфиксные:
++,--
присваивания:
+=,-=,*=,/=,%=-
доступ по индексу:
чтение:
d[a], более одного аргумента — ошибказапись:
d[a1] = a2, более одного аргумента в[]— ошибка
Операции in, !in и .. со значениями типа dynamic запрещены.
Более подробное техническое описание см. в документе спецификации.
© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/dynamic-type.html