Псевдонимы типов

Псевдонимы типов предоставляют альтернативные имена для существующих типов. Если имя типа слишком длинное, вы можете ввести другое, более короткое имя, и использовать его вместо первоначального.

Псевдонимы типов полезны, когда вы хотите сократить длинные имена типов, содержащих обобщения. К примеру, можно упрощать названия типов коллекций:

typealias NodeSet = Set<Network.Node>

typealias FileTable<K> = MutableMap<K, MutableList<File>>

Вы также можете объявить псевдонимы для функциональных типов:

typealias MyHandler = (Int, String, Any) -> Unit

typealias Predicate<T> = (T) -> Boolean

Вы можете ввести новые имена для внутренних или вложенных классов:

class A {
    inner class Inner
}
class B {
    inner class Inner
}

typealias AInner = A.Inner
typealias BInner = B.Inner

Псевдонимы типов не вводят новых типов. Они эквивалентны соответствующим базовым типам. Когда вы добавляете typealias Predicate<T> и используете Predicate<Int> в своём коде, компилятор Kotlin всегда преобразовывает это в (Int) -> Boolean. Таким образом, вы можете передать переменную своего типа в любое место, где требуется базовый тип (тот, которому был задан псевдоним), и наоборот:

typealias Predicate<T> = (T) -> Boolean

fun foo(p: Predicate<Int>) = p(42)

fun main() {
    val f: (Int) -> Boolean = { it > 0 }
    println(foo(f)) // выведет "true"

    val p: Predicate<Int> = { it > 0 }
    println(listOf(1, -2).filter(p)) // выведет "[1]"
}