Some types read like a long address: Map<String, List<Pair<UserId, Role>>> — fine for the compiler, tiring for humans. typealias gives a shorter name without changing runtime — it is still the same underlying type. When you need a distinct type at compile time without wrapping cost on the JVM, @JvmInline value class wraps one value but erases to it at runtime when optimized — perfect for ids and units.
typealias — nickname, not new identity