Génériques <T>
Types et fonctions avec un paramètre de type, qui fonctionnent pour plusieurs types sans perdre en précision.
Exemple
#function first<T>(items: T[]): T | undefined {
return items[0]
}
const name = first(['Léa', 'Lucas'])
// const name: string | undefined
const course = first([{ title: 'HTML', modules: 11 }])
// const course: { title: string; modules: number } | undefined
console.log(name?.toUpperCase())
console.log(course?.modules)LÉA 11
Définition et utilisation
#Un générique est un type avec un paramètre, noté entre chevrons : <T>. Il permet d’écrire une fonction, une classe ou un type une seule fois, et de l’utiliser avec différents types de données, tout en conservant l’information de type complète.
Sans générique, une fonction qui renvoie le premier élément d’un tableau devrait renvoyer any ou unknown. Avec le générique function first<T>(items: T[]): T | undefined, le compilateur sait que pour un tableau de chaînes, le résultat est une chaîne, et pour un tableau de cours, un objet cours.
Le plus souvent, le paramètre de type est déduit des arguments, donc vous n’avez pas besoin de le préciser. Vous l’écrivez explicitement quand il ne peut pas être déduit, par exemple useState<string | null>(null).
Syntaxe
#function name<T>(param: T): T { … }
type Box<T> = { value: T }Plus d’exemples
#type ApiResponse<T> = { ok: true; data: T } | { ok: false; error: string }
function unwrap<T>(response: ApiResponse<T>, fallback: T): T {
return response.ok ? response.data : fallback
}
const levels: ApiResponse<number[]> = { ok: true, data: [1, 2, 3] }
const failed: ApiResponse<number[]> = { ok: false, error: 'timeout' }
console.log(unwrap(levels, []))
console.log(unwrap(failed, []))[1, 2, 3] []
Bonnes pratiques
#- Les noms des paramètres de type peuvent être descriptifs, par ex.
<TItem>, quand il y en a plusieurs. Un simpleTconvient pour des fonctions simples. - Si un paramètre de type n’apparaît qu’une seule fois dans la signature, il n’est probablement pas nécessaire.
Entrées associées
#- Contraintes génériques (extends)Exiger qu’un paramètre de type respecte une forme précise.
- Paramètres de type par défautLa valeur que prend un paramètre de type quand il n’est ni fourni ni déduit.
- keyofCrée une union des noms de clés d’un type d’objet donné.
- Tableaux : number[] et Array<T>Les types de tableaux, où tous les éléments ont le même type.
Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.