Но сама идея как работает деструктуризация - не является безопасной сама в себе. Я куда угодно могу написать сколько угодно componentN с любыми типами. Даже сейчас же есть в стандартной либе:
val (first, second, third) = list
, который спокойно может уронить в рантайме.
Поэтому и предлагал для позиционных сделать фолбек до get(Int) там, где это имеет смысл (например в листах тех же) и в именных как основной путь - на основе пропертей и фолбек до get(String), там где это уместно.
// file1.kt
data class User(val id: Int, val name: String)
// file2.kt
val (id, name) = user
// changes in code
// file1.kt
data class User(val id: Int, val cityName: String, val name: String)
// file2.kt: Oops
Текущая деструкторизация для data классов вредна чуть более чем полностью)