Przeglądając kod źródłowy reguły tslint, natrafiłem na następujące oświadczenie:
if (node.parent!.kind === ts.SyntaxKind.ObjectLiteralExpression) {
return;
}
Zauważ !
operatora po node.parent
. Ciekawy!
Najpierw próbowałem skompilować plik lokalnie z moją aktualnie zainstalowaną wersją TS (1.5.3). Wynikający błąd wskazał dokładną lokalizację huku:
$ tsc --noImplicitAny memberAccessRule.ts
noPublicModifierRule.ts(57,24): error TS1005: ')' expected.
Następnie zaktualizowałem do najnowszej wersji TS (2.1.6), która skompilowała go bez problemu. Wydaje się, że jest to cecha TS 2.x. Ale transpilacja całkowicie zignorowała huk, co spowodowało następujący JS:
if (node.parent.kind === ts.SyntaxKind.ObjectLiteralExpression) {
return;
}
Moje Google fu do tej pory mnie zawiodło.
Co to jest operator wykrzyknika TS i jak działa?