Kotlin supports type inference, but all variables are typed.
Byte, Short, Int, Long
UByte, UShort, UInt, ULong
Float, Double
Boolean
Char
String
You can declare without initializing or just explicitly type while initializing:
val d: Int
d = 3
val e: String = "hello"
Attempting to use an uninitialized variable is a type error:
variables.kt:3:10: error: variable 'd' must be initialized
println(d)
^