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.