LoginSignup
252
121

More than 5 years have passed since last update.

TypeScriptの変数の末尾の"!"(エクスクラメーション/感嘆符)の意味

Last updated at Posted at 2018-05-05

具体的に言うと、TypeScriptで"foo"という変数に対して"foo!"と記述した時の意味。

この"!"の呼び方は、Non-null assertion operator。
プログラマがコンパイラに対して、この変数はundefinedやnullになることはありません、と教える記述。
不正確だが、型<T>があるとして、型<T | undefined | null>を型<T>に静的にcastしていると考えると分かりやすい。
変換前の型は、型<T | undefined>でも型<T | null>でもOK。

以下、コードによる説明。

    private func(): string {
        let foo = external_func(); // 戻り値の型はstring | undefinedとする

        // return foo; NG。戻り値の型がstringに対してstring | undefinedを返しているため
        return foo!; // OK。"!"によりstring | undefinedをstringにcastしているのと同等
     }

なお、この記述はTypeScriptがJavascriptに変換された後のコードからは削除されるとのこと。
なので、コード実行時に違反していても例外などのエラーは発生しない。
上のコードでいえば、コード実行時にfooの値がundefinedやnullでもエラーは発生しない。
(コンパイラから見てfooにundefinedが入ることが明らかだと、コンパイル時にはエラーになる)

より詳細な情報は、以下のページに記述あり。
公式ドキュメント
stack overflow

252
121
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
252
121