logo hsb.horse
← Retour à l’index des snippets

Snippets

TypeScript Non-null Assertion

Les fonctions de garde de type TypeScript pour éliminer undefined et null. Assurent à la fois les erreurs d'exécution et la sécurité des types.

Publié: Mis à jour:

Lors de l’accès aux API externes ou aux indices de tableaux, les valeurs peuvent devenir undefined, ce qui les rend difficiles à manipuler telles quelles au niveau du type. Utilisez les assertions non-null pour obtenir à la fois des vérifications d’exécution et un rétrécissement des types.

Code

function assertIsDefined<T>(value: T): asserts value is NonNullable<T> {
if (value === undefined || value === null) {
throw new Error(`Expected 'value' to be defined, but received ${value}`);
}
}
function nonNull<T>(value: T): NonNullable<T> {
assertIsDefined(value);
return value;
}

Exemples d’utilisation

Accès sécurisé aux éléments d’un tableau

const arr = [1, 2, 3];
const value = arr[10]; // number | undefined
// Impossible d'éviter l'erreur de type
console.log(value.toFixed()); // Error: Object is possibly 'undefined'
// Utilisation de nonNull
const safeValue = nonNull(arr[10]);
// Inféré comme NonNullable<number>
console.log(safeValue.toFixed()); // OK

Validation de la réponse API

interface User {
name: string;
}
async function getUser(id: string): Promise<User> {
const response = await fetch(`/api/users/${id}`);
const user = await response.json() as User | undefined;
// Erreur si la réponse est vide
assertIsDefined(user);
// user peut être traité comme type User à ce stade
return user;
}

Différence avec l’opérateur !

TypeScript dispose d’un opérateur d’assertion non-null value!, mais celui-ci n’effectue pas de vérifications à l’exécution. L’utilisation de fonctions d’assertion permet de valider les valeurs à l’exécution tout en rétrécissant également le type.

Précautions

Utilisez les fonctions d’assertion uniquement lorsque vous êtes convaincu qu’une valeur existe réellement. Une utilisation négligente entraînera des erreurs d’exécution. En particulier pour l’accès aux indices de tableaux, envisagez de vérifier la longueur au préalable.