typealias en Kotlin es un mecanismo para declarar un nombre alternativo para un tipo existente (clase, interfaz, función, tipo genérico, etc.). Se utiliza para:
Limitaciones:
Ejemplo de uso:
typealias ClickHandler = (View, MotionEvent) -> Unit fun setClickHandler(handler: ClickHandler) { // ... } val handler: ClickHandler = { view, event -> // Lógica de procesamiento }
Soporte y legibilidad:
Pregunta: "¿Son los typealias en Kotlin nuevos tipos desde la perspectiva del compilador y se pueden utilizar para restringir el valor de las variables?"
Respuesta: No, typealias es solo un sinónimo del tipo. No forman un nuevo tipo y no proporcionan ninguna verificación adicional en tiempo de compilación. Todas las funciones, variables y parámetros del tipo typealias son el mismo tipo original.
Ejemplo:
typealias UserId = String typealias Email = String fun process(id: UserId) {} fun process(email: Email) {} process("abc@def.com") // No hay error — ¡no se puede diferenciar!
Historia
Usamos typealias para identificadores de diferentes entidades (UserId, OrderId), suponiendo que el compilador los diferenciaría, pero en realidad pasamos valores entre ellos sin errores en tiempo de compilación, lo que llevó a la confusión de la lógica y errores.
Historia
Al migrar del API antiguo asignamos expresiones lambda complejas a typealias, pero no indicamos nuevas definiciones en la documentación. Resultado — los programadores no entendían qué significaba el alias (por ejemplo, Loader) y lo aplicaban incorrectamente, lo que resultó en errores en tiempo de ejecución.
Historia
En uno de los proyectos redefinimos typealias ViewClickHandler en diferentes archivos con diferentes firmas, creyendo que los alias estarían relacionados globalmente. Al final, durante la autogeneración de documentación hubo duplicación, y al compilar surgió un conflicto de nombres.