TypeScript
14 - Les Guards et les assertions

Guards

Union

Il est possible d'avoir plusieurs types pour une variable. Par exemple, une variable peut être de type number ou string.

function displayId(id: number | string) {
    console.log(`ID: ${id}`);
}
 

Les Guards

Les gards permettent de déterminer le type dans la fonction. Il s'agit d'une abstraction.

typeof

On peut utiliser une condition avec typeof pour déterminer le type.

function displayId(id: number | string) {
    if (typeof id === "number") {
        console.log(`ID: ${id}`);
    } else {
        console.log(`ID: ${id.toUpperCase()}`);
    }
}

instanceof

On peut utiliser instanceof pour déterminer le type. typeof s'utilise pour les types primitifs et instanceof pour les objets (classes, fonctions, etc)

class User {
    name: string;
    constructor(brand: string) {
        this.firstName = name;
    }
}
 
class Product {
    name: string;
    constructor(brand: string) {
        this.brand = name;
    }
}
 
function displayInfo(item: User | Product) {
    if (item instanceof User) {
        console.log(`User: ${firstName.name}`);
    } else {
        console.log(`Product: ${brand.name}`);
    }
}

in

On peut utiliser in pour déterminer si une propriété existe dans un objet.

interface User {
    name: string;
    age: number;
}
 
interface Product {
    brand: string;
    price: number;
}
 
function displayInfo(data: User | Product) {
    if ("firstName" in data) {
        console.log(`User: ${data.firstName}`);
    } else {
        console.log(`Product: ${data.brand}`);
    }
}

On pourrait bénéficier de l'autocomplétion de l'IDE.

guard