具体的に言うと、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