[解決済み】Typescriptで、! (エクスクラメーションマーク/バン)演算子でメンバを再参照するのは?
質問
tslintルールのソースコードを見ていたら、以下のような記述がありました。
if (node.parent!.kind === ts.SyntaxKind.ObjectLiteralExpression) {
return;
}
ここで
!
演算子の後に
node.parent
. 面白い!
まず、現在インストールされているTSのバージョン(1.5.3)で、ローカルにコンパイルしてみました。その結果、エラーはbangの正確な場所を指していました。
$ tsc --noImplicitAny memberAccessRule.ts
noPublicModifierRule.ts(57,24): error TS1005: ')' expected.
次に、最新のTS(2.1.6)にアップグレードしてみたところ、問題なくコンパイルできました。ということで、TS2.xの特徴のようです。 しかし を指定すると、トランスパイレーションでbangが完全に無視され、以下のようなJSになります。
if (node.parent.kind === ts.SyntaxKind.ObjectLiteralExpression) {
return;
}
私のGoogle fuは今のところ失敗しています。
TSのエクスクラメーションマーク演算子とは、どのようなものなのでしょうか?
どのように解決するのですか?
それは、非NULL断定演算子です。これは、コンパイラに「この式はNULLにできない」と伝えるためのものです。
null
または
undefined
である可能性を否定するものではありません。
null
または
undefined
." タイプチェッカー自身がその判断を下せないこともあります。
説明されている こちら :
新しい
!
ポストフィックス式演算子は、タイプチェッカーがその事実を結論づけることができないコンテキストで、オペランドが非NULLかつ非定義であることを主張するために使用することができます。具体的には、演算子x!
の型の値を生成する。x
とnull
とundefined
を除く。形式のタイプアサーションと同様に<T>x
とx as T
を使用します。!
非 NULL のアサーション演算子を削除するだけでよい。
その説明の中で、quot;assert"という用語の使い方が少し誤解を招くと思います。これは、次のような意味での「assert"」です。 開発者はそれを表明している テストが実行されるという意味ではありません。最後の行は、確かにJavaScriptのコードが出力されないことを示しています。
関連
-
[解決済み] グローバル定数の定義
-
[解決済み] フォーインステートメント
-
[解決済み] Typescript は ?演算子をサポートしていますか?(そして、それは何と呼ばれているのでしょうか?)
-
[解決済み] ジェネリックスを使用したTypescriptのarrow関数の構文はどのようになっていますか?
-
[解決済み] タイプスクリプトのレコードタイプとは何ですか?
-
[解決済み] noImplicitAnyフラグを有効にしてtypescriptをコンパイルすると、"Index signature of object type implicitly has an 'any' type "というエラーが発生しますが、どうすれば防ぐことができますか?
-
[解決済み] TypeScriptのファイル変更時にts-nodeを監視して再読み込みする方法
-
[解決済み】Typescriptのパラメータ名のクエスチョンマークとは?
-
[解決済み】typescriptで`is`キーワードは何をするのですか?
-
[解決済み] TypeScriptのタイプアサーションと新しい演算子であるas`の違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 未使用のパラメータに対する型チェックをスキップする
-
[解決済み] TypeScriptのハッシュマップ/辞書インターフェイス
-
[解決済み] TypeScriptの「as const」の意味とその使用例とは?
-
[解決済み] TypeScriptのsetTimeoutはどのような戻り値型を使用すればよいですか?
-
[解決済み] Jestで関数をモックする方法
-
[解決済み] Object literal may only specify known properties" というエラーが発生するのはなぜですか?
-
[解決済み] エラー TS2345: 型 'T' の引数は型 'object' のパラメータに代入できません。
-
[解決済み] TypeScriptでオブジェクトを初期化する方法
-
[解決済み] TypeScriptでオブジェクトに動的にプロパティを割り当てるには?
-
[解決済み] クラス定数を実装するには?