Patrząc na źródłowego reguły tslint, natknąłem się następującym stwierdzeniem:W Maszynopisie, co to jest! (wykrzyknik/bang) operator podczas dereferencji członka?
if (node.parent!.kind === ts.SyntaxKind.ObjectLiteralExpression) {
return;
}
zauważy operatora !
po node.parent
. Ciekawy!
Po raz pierwszy spróbowałem skompilować plik lokalnie z moją aktualnie zainstalowaną wersją TS (1.5.3). Uzyskany błąd wskazał na dokładnym położeniem hukiem:
$ tsc --noImplicitAny memberAccessRule.ts
noPublicModifierRule.ts(57,24): error TS1005: ')' expected.
Następny uaktualnieniu do najnowszych TS (2.1.6), które skompilowane go bez problemu. Wydaje się, że jest to cecha TS 2.x. Ale transpilation zignorował huk całkowicie, w wyniku następującej JS:
if (node.parent.kind === ts.SyntaxKind.ObjectLiteralExpression) {
return;
}
My Google fu jak dotąd nie udało mi.
Co to jest operator wykrzyknika TS i jak to działa?
Dobre wezwanie na temat niejednoznaczności "twierdzącej". – estus
Dobre wyjaśnienie. Uważam, że dobrą praktyką jest zrobienie 'console.assert()' na danej zmiennej przed dodaniem '!' Po niej. Ponieważ add '!' Mówi kompilatorowi, aby ignorował sprawdzanie wartości NULL, kompiluje się on do noop w javascript. Więc jeśli nie masz pewności, że zmienna ma wartość inną niż null, lepiej wykonać jawną kontrolę assert. – Jayesh