Unions en TypeScript

Introduction aux Unions

En TypeScript, certaines valeurs peuvent appartenir à plusieurs types différents. Ces types alternatifs sont désignés sous le nom de unions. Ce concept fait référence à la théorie des ensembles, qui définit une "union" comme un regroupement de plusieurs types.

Syntaxe des Unions

Un type union s'exprime en combinant plusieurs types par le biais du symbole de pipe vertical |. Par exemple :

let myVar: number | string = '42';

Exemple de Union

Prenons un exemple avec une fonction logEither() qui accepte une valeur pouvant être soit un nombre, soit une chaîne de caractères :

function logEither(value: number | string) {
    console.log(value);
}

logEither('Durandal'); // Correct
logEither(7777777); // Correct
logEither(false); // Erreur : Type 'boolean' n'est pas assignable à type 'number | string'.

Membres du Type Union

Lorsque vous avez une valeur qui est un type union, TypeScript ne permet d'accéder qu'aux membres qui existent sur tous les types possibles. Dans l'exemple suivant, nous utilisons des opérateurs ternaires pour générer une valeur. Ici, le type de value sera boolean | string | string[], et le seul membre commun est la méthode toString(). D'autres membres, comme length, ne peuvent pas être utilisés car ils ne s'appliquent pas à une valeur de type boolean :

// Type: boolean | string | string[]
const value = Math.random() > 0.5
    ? false
    : Math.random() > 0.5
        ? 'Leela'
        : ['Durandal', 'Thoth'];

value.toString(); // Correct : existe dans les trois types
value.length; /* Erreur : La propriété 'length' n'existe pas sur le type 'false | "Leela" | string[]'. * La propriété 'length' n'existe pas sur le type 'false'. */