Types Union et Intersection
Comprendre et utiliser les types Union et Intersection en TypeScript
Types Union (|)
Un type union permet de définir qu'une variable peut avoir plusieurs types possibles.
let id: string | number;
id = 42;
id = "ABC123";
id = true;Les unions sont utiles pour accepter différentes formes de données tout en gardant la vérification de type.
Types Intersection (&)
Un type intersection combine plusieurs types en un seul : l'objet final doit respecter tous les types.
type Person = { name: string };
type Employee = { company: string };
type EmployeePerson = Person & Employee;
const bob: EmployeePerson = {
name: "Bob",
company: "OpenAI"
};Discriminated unions
Une discriminated union est une union de types où chaque variante possède une propriété commune avec une valeur littérale différente.
Cette propriété sert à différencier les variantes.
type Square = { kind: "square"; size: number };
type Rectangle = { kind: "rectangle"; width: number; height: number };
type Shape = Square | Rectangle;Type Guards avec Discriminated Unions
Un type guard est une condition qui permet de narrow (réduire) le type dans un bloc de code. Avec une discriminated union, on peut utiliser un simple if sur la propriété discriminante.
function area(shape: Shape) {
if (shape.kind === "square") {
return shape.size * shape.size; // TS sait que c’est un Square
} else {
return shape.width * shape.height; // Ici, c’est un Rectangle
}
}
console.log(area({ kind: "square", size: 5 })); // 25
console.log(area({ kind: "rectangle", width: 4, height: 6 })); // 24Type Guards personnalisés (avec is)
Il est possible de créer des fonctions qui vérifient si une valeur est d'un certain type et qui informent TypeScript grâce à une annotation spéciale :
function isSquare(shape: Shape): shape is Square {
return shape.kind === "square";
}
function area(shape: Shape) {
if (isSquare(shape)) {
// TypeScript sait ici que shape est Square
return shape.size * shape.size;
} else {
// Ici shape est Rectangle
return shape.width * shape.height;
}
}L'annotation shape is Square indique que la fonction retourne true si shape est bien de type Square, ce qui permet au compilateur de narrow automatiquement le type dans les blocs conditionnels.