При взгляде на исходный код для правила tslint я натолкнулся на следующее утверждение:
if (node.parent!.kind === ts.SyntaxKind.ObjectLiteralExpression) {
return;
}
Обратите внимание на оператор !
после node.parent
. Интересно!
Сначала я попытался скомпилировать файл локально с моей установленной версией TS (1.5.3). Полученная ошибка указала на точное местоположение взрыва:
$ tsc --noImplicitAny memberAccessRule.ts
noPublicModifierRule.ts(57,24): error TS1005: ')' expected.
Затем я обновил до последней версии TS (2.1.6), которая скомпилировала ее без проблем. Так что, похоже, это особенность TS 2.x. Но транспиляция полностью игнорировала удар, в результате получилось следующее JS:
if (node.parent.kind === ts.SyntaxKind.ObjectLiteralExpression) {
return;
}
Мой Google fu до сих пор провалил меня.
Что такое оператор восклицательной метки TS и как он работает?