Middle
Quand faut-il utiliser des types et quand des interfaces en TypeScript?
sobes.tech IA
Réponse de l'IA
Les types (type) doivent être utilisés pour :
- Unions (unions) et intersections (intersections) :
type Status = "pending" | "completed" | "failed"; type UserWithAddress = User & Address; - Types primitifs et littéraux :
type ID = string | number; type Direction = "up" | "down" | "left" | "right"; - Tuples :
type RgbColor = [number, number, number]; - Création d'alias pour des types existants :
type StringOrNumber = string | number; - Types conditionnels :
type TypeOfProp<T, K extends keyof T> = T[K];
Les interfaces (interface) doivent être utilisées pour :
- Description de la structure des objets :
interface User { id: number; name: string; age?: number; // propriété optionnelle } - Implémentation par des classes (implements) :
interface Logger { log(message: string): void; } class ConsoleLogger implements Logger { log(message: string) { console.log(message); } } - Extension d'autres interfaces (extends) :
interface Person { name: string; } interface Employee extends Person { employeeId: number; } - Fusion déclarative (declaration merging) : Cela permet d'étendre une interface existante en la déclarant à nouveau. Avec les types, ce n'est pas possible.
interface Box { width: number; } interface Box { // Cela ajoutera la propriété height à l'interface Box height: number; }
Résumé comparatif :
| Caractéristique | type |
interface |
|---|---|---|
| Types union | Oui | Non |
| Types intersection | Oui | Non |
| Types primitifs/littéraux | Oui | Non |
| Tuples | Oui | Non |
| Alias de types | Oui | Non |
| Types conditionnels | Oui | Non |
| Description d'objets | Oui | Oui |
| Implémentation avec classes | Non | Oui |
| Extension | Oui (avec &) |
Oui (avec extends) |
| Fusion déclarative | Non | Oui |
En général, pour décrire la structure des objets, il est préférable d'utiliser interface, car ils conviennent mieux à l'approche orientée objet et supportent la fusion déclarative. Pour tout le reste, notamment pour la combinaison et la création de nouveaux types à partir de types existants, type est plus flexible.