typealias en Kotlin est un mécanisme pour déclarer un nom alternatif pour un type existant (classe, interface, fonction, type générique, etc.). Utilisé pour :
Limitations :
Exemple d'application :
typealias ClickHandler = (View, MotionEvent) -> Unit fun setClickHandler(handler: ClickHandler) { // ... } val handler: ClickHandler = { view, event -> // Logique de gestion }
Support et lisibilité :
Question : "Les typealias en Kotlin sont-ils de nouveaux types du point de vue du compilateur et peuvent-ils être utilisés pour restreindre la valeur des variables ?"
Réponse : Non, les typealias ne sont que des synonymes de type. Ils ne forment pas un nouveau type et ne fournissent aucune vérification supplémentaire au moment de la compilation. Toutes les fonctions, variables et paramètres de type typealias sont du même type de base.
Exemple :
typealias UserId = String typealias Email = String fun process(id: UserId) {} fun process(email: Email) {} process("abc@def.com") // Pas d'erreur — pas de distinction !
Histoire
Utilisation de typealias pour les identifiants de différentes entités (UserId, OrderId), supposant que le compilateur les distinguerait, mais en réalité, ils ont passé des valeurs l'un à l'autre sans erreurs de compilation, entraînant une confusion de logique et des bogues.
Histoire
Lors de la migration d'une ancienne API, des typealias ont été assignés à des expressions lambda complexes, mais la documentation n'a pas indiqué de nouvelles définitions. Résultat — les programmeurs ne comprenaient pas ce que signifiait l'alias (par exemple, Loader), et l'ont utilisé incorrectement, ce qui a conduit à des erreurs d'exécution.
Histoire
Dans un des projets, typealias ViewClickHandler a été redéfini dans différents fichiers avec des signatures différentes, en pensant que les alias seraient liés globalement. Au final — lors de la génération automatique de documentation, il y avait des duplications, et lors de la compilation, un conflit de noms est survenu.