Définition
Rôle : typedef permet de créer des noms courts pour des types existants, aussi appelés alias de type. Dart prend en charge tous les types à partir de la version 2.13 ; auparavant, seul les types de fonction étaient autorisés.
Syntaxe : typedef Alias = TypeInitial;
Exemple : typedef IntList = List<int>;. Après cette déclaration, vous pouvez utiliser directement IntList au lieu d’écrire List<int>.
typedef IntList = List<int>;
IntList il = [1, 2, 3];Langage du code : Dart (dart)
Prise en charge des paramètres génériques
Les alias de type peuvent intégrer des génériques pour simplifier les types composés complexes :
typedef ListMapper<X> = Map<X, List<X>>;Langage du code : Dart (dart)
ListMapper<String> est strictement équivalent à Map<String, List<String>>, le code devient plus concis et lisible.
typedef ListMapper<X> = Map<X, List<X>>;
Map<String, List<String>> m1 = {}; // Écriture longue et verbeuse
ListMapper<String> m2 = {}; // Même type, plus court et clairLangage du code : Dart (dart)
Alias de type de fonction
Il est possible de définir un alias pour une signature de fonction afin d’uniformiser le format des fonctions :
typedef Compare<T> = int Function(T a, T b);Langage du code : Dart (dart)
Toute fonction correspondant à la signature (T, T) → int appartient au type Compare<T>. L’opérateur is permet de vérifier la compatibilité du type.
typedef Compare<T> = int Function(T a, T b);
int sort(int a, int b) => a - b;
void main() {
assert(sort is Compare<int>); // Vérification vraie
}
Langage du code : Dart (dart)
Exemples concrets
// Définir des alias de type
typedef IntList = List<int>;
typedef StringMap = Map<String, dynamic>;
void main() {
// Utiliser directement les alias
IntList nums = [10, 20, 30];
StringMap info = {"name": "dart", "version": "2.18"};
print(nums);
print(info);
}Langage du code : JavaScript (javascript)

// Alias générique : clé X, valeur tableau de type X
typedef ListMapper<X> = Map<X, List<X>>;
void main() {
// Forme longue native
Map<String, List<String>> oldData = {
"fruit": ["apple", "banana"]
};
// Forme abrégée avec typedef, type identique
ListMapper<String> newData = {
"fruit": ["apple", "banana"]
};
print(oldData);
print(newData);
}Langage du code : Dart (dart)

// Alias de fonction générique : reçoit deux T, renvoie un entier
typedef Compare<T> = int Function(T a, T b);
// Fonction correspondant à Compare<int>
int intSort(int a, int b) => a - b;
// Fonction correspondant à Compare<String>
int strSort(String a, String b) => a.length - b.length;
void main() {
// Vérification de type
assert(intSort is Compare<int>);
assert(strSort is Compare<String>);
// Utilisation en tant que paramètre
List<int> arr = [5, 1, 3];
arr.sort(intSort);
print(arr); // Résultat : [1, 3, 5]
}Langage du code : Dart (dart)

typedef (alias de type)