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の感嘆符演算子とは何ですか、またどのように機能しますか?
それがnull以外のアサーション演算子です。 「この式はここではnull
またはundefined
になることはできません。したがって、null
またはundefined
である可能性について文句を言わないでください。」時々、型チェッカーはその決定自体をすることができません。
説明されています ここ :
型チェッカーがその事実を結論付けることができない状況では、新しい
!
修正後式演算子を使用して、そのオペランドがnullおよびundefinedでないことを表明することができます。具体的には、操作x!
は、x
とnull
を除外したundefined
型の値を生成します。フォーム<T>x
およびx as T
の型アサーションと同様に、!
のnull以外のアサーション演算子は、発行されたJavaScriptコードでは単純に削除されています。
その説明では、「アサート」という用語の使用が少し誤解を招くことがあります。テストが実行されるという意味ではなく、開発者がそれをアサートしているという意味では "アサート"です。最後の行は、JavaScriptコードが発行されないことを示しています。
ルイの答えは素晴らしいですが、私はそれを簡潔に要約しようと思いました:
Bang演算子は、そうでなければ要求される可能性がある "nullではない"制約を一時的に緩和するようにコンパイラーに指示します。 「開発者として、この変数を今すぐnullにすることはできません。