L'Assignabilité en TypeScript
Qu'est-ce que l'assignabilité ?
L'assignabilité en TypeScript décrit la capacité à attribuer une valeur d'un certain type de données à une variable d'un type identique ou différent. Cela devient crucial lors de diverses opérations où des données sont transférées, notamment lors de l'affectation de valeurs à des variables ou lors du passage d'arguments à des fonctions.
Quand l'assignabilité se manifeste
TypeScript effectue des contrôles d'assignabilité chaque fois qu'une valeur est assignée à une autre zone de la mémoire. Cela inclut des situations comme :
- L'assignation de valeurs à des variables.
- La transmission d'arguments aux fonctions.
Exemple d'assignation de types compatibles
Considérons le code suivant : ici, la variable spooky
est d'abord assignée une valeur de type booléen. Par conséquent, TypeScript impose que spooky
reste un booléen.
let spooky = true;
spooky = false; // Autorisé
spooky = 'skeletons'; // Non autorisé
Si l'on exécute ce code, une erreur sera déclenchée :
Erreur : Le type 'string' ne peut pas être assigné au type 'boolean'.
Exemples : Comparaison des types d'objet
Lorsqu'il s'agit de comparer des types d'objet, TypeScript vérifie que toutes les propriétés nécessaires sont présentes dans l'objet que l'on souhaite assigner. De plus, il s'assure que tous les types correspondent.
Dans l'exemple suivant, nous définissons une interface appelée Skeleton
, qui organisera les propriétés avec leurs types définis :
interface Skeleton {
spooky: boolean;
scary: boolean;
}
function receiveSkeleton(skeleton: Skeleton) {
console.log(skeleton.spooky ? 'Spooky ' : 'Not spooky...');
console.log(skeleton.scary ? 'scary!' : 'Not scary...');
}
receiveSkeleton({ spooky: true, scary: false }); // Ok
Dans cet exemple, la première fonction receiveSkeleton()
fonctionne parce que l'objet passé comprends les propriétés requises spooky
et scary
avec les types corrects.
Gestion des erreurs d'assignabilité
Dans les deux exemples suivants, une erreur sera générée lorsque l'on ne respecte pas les types attendus :
- Dans ce cas,
spooky
est de type string au lieu de boolean :typescript receiveSkeleton({ spooky: 'Very!', scary: true });
L'erreur sera :Erreur : Le type 'string' ne peut pas être assigné au type 'boolean'.
- Dans ce dernier exemple, l'objet passé à
receiveSkeleton()
ne possède pas la propriétéscary
requise :typescript receiveSkeleton({ spooky: false });
Cela engendrera l'erreur suivante :Erreur : Argument du type '{ spooky: false; }' non assignable au paramètre de type 'Skeleton'. La propriété 'scary' est manquante dans le type '{ spooky: false; }' mais requise dans le type 'Skeleton'.