1. ホーム
  2. object

[解決済み] オブジェクトメソッドの後のタイプスクリプトの演算子

2023-01-28 20:47:33

質問

あるオブジェクト X とメソッド getY() オブジェクトを返す Y メソッドで a() のように、typescriptで記述します。 このような式は何を意味するのでしょうか。

X.getY()!.a()

というのは ! 演算子はnullに対するチェックに使われると思いますが、具体的にどのように動作するのでしょうか?言語のどこで定義されているのでしょうか?

どのように解決するのですか?

これは "Non-null assertion operator" と呼ばれるもので、コンパイラに次のように伝えます。 x.getY() がNULLでないことをコンパイラに伝えます。

これはtypescript 2.0の新しい機能で、それについては 新機能 のページで読むことができます。

新しいポストフィックス式演算子 ! オペランドが非 NULL および非定義であることを表明するために使用できます。 と断定するために使用することができます。具体的には、演算子 は、NULLおよび未定義を除いたxの型の値を生成します。 xおよびx as Tの形式の型アサーションと同様に、! non-null アサーション演算子は、生成される JavaScript コードから削除されます。 JavaScript コードで削除されます。

// Compiled with --strictNullChecks
function validateEntity(e?: Entity) {
    // Throw exception if e is null or invalid entity
}

function processEntity(e?: Entity) {
    validateEntity(e);
    let s = e!.name;  // Assert that e is non-null and access name
}


編集

この機能をドキュメント化するための課題があります。NULL でないアサーション演算子 (!) の文書化