web-dev-qa-db-fra.com

! opérateur dans TypeScript après la méthode objet

J'ai un objet X avec une méthode getY() renvoyant un objet Y avec une méthode a(), en TypeScript. Que signifie une expression comme celle-ci:

X.getY()!.a()

Je suppose que le ! L'opérateur est utilisé pour vérifier par rapport à null, mais comment fonctionne-t-il concrètement? Où est défini dans la langue?

36
user2032922

Il est appelé "opérateur d'assertion non nul" et indique au compilateur que x.getY() n'est pas nul.

C'est une nouvelle fonctionnalité TypeScript 2.0 et vous pouvez en lire plus sur la page Quoi de neuf , voici ce qu'elle dit:

Un nouveau ! L'opérateur d'expression post-fix peut être utilisé pour affirmer que son opérande est non nul et non indéfini dans des contextes où le vérificateur de type n'est pas en mesure de conclure ce fait. Plus précisément, l'opération x! produit une valeur de type x avec null et undefined exclus. Semblable aux assertions de type des formes x et x comme T, le! L'opérateur d'assertion non nul est simplement supprimé dans le code JavaScript émis.

// Compiled with --strictNullChecks
function validateEntity(e?: Entity) {
    // Throw exception if e is null or invalid entity
}

function processEntity(e?: Entity) {
    validateEntity(e);
    let s = e!.name;  // Assert that e is non-null and access name
}

Modifier

Il y a un problème pour documenter cette fonctionnalité: Documenter l'opérateur d'assertion non nul (!)

62
Nitzan Tomer