En caractères d'imprimerie, ce qui est la ! (point d'exclamation) de l'opérateur lors de la référence à un membre?

Lorsque l'on regarde le code source pour un tslint la règle, je suis tombé sur la déclaration suivante:

if (node.parent!.kind === ts.SyntaxKind.ObjectLiteralExpression) {
    return;
}

Avis de la ! opérateur après node.parent. Intéressant!

J'ai d'abord essayé de compiler le fichier en local avec ma version actuellement installée de TS (1.5.3). L'erreur qui en résulte a souligné l'emplacement exact de la bang:

$ tsc --noImplicitAny memberAccessRule.ts 
noPublicModifierRule.ts(57,24): error TS1005: ')' expected.

Ensuite, j'ai mis à niveau vers la dernière TS (2.1.6), qui a compilé sans problème. De sorte qu'il semble être caractéristique de TS 2.x. Mais la transpilation ignoré le bang complètement, résultant dans la suite de JS:

if (node.parent.kind === ts.SyntaxKind.ObjectLiteralExpression) {
    return;
}

Mon Google-fu a jusqu'à présent échoué à moi.

Qu'est-ce que TS du point d'exclamation opérateur, et comment ça fonctionne?

OriginalL'auteur Mike Chamberlain | 2017-02-16