Ao olhar para o código-fonte para uma regra tslint, deparei-me com a seguinte declaração:
if (node.parent!.kind === ts.SyntaxKind.ObjectLiteralExpression) {
return;
}
Observe o !
operador depois node.parent
. Interessante!
Primeiro tentei compilar o arquivo localmente com a versão do TS atualmente instalada (1.5.3). O erro resultante apontou para a localização exata do estrondo:
$ tsc --noImplicitAny memberAccessRule.ts
noPublicModifierRule.ts(57,24): error TS1005: ')' expected.
Em seguida, atualizei para o TS mais recente (2.1.6), que o compilou sem problemas. Portanto, parece ser um recurso do TS 2.x. Mas a transpilação ignorou completamente o estrondo, resultando no seguinte JS:
if (node.parent.kind === ts.SyntaxKind.ObjectLiteralExpression) {
return;
}
Até agora, meu Google fu me falhou.
O que é o operador de ponto de exclamação da TS e como ele funciona?