web-dev-qa-db-ja.com

Typescriptで!:はどういう意味ですか?

14
Sinosaurus

特定のプロパティ、変数がnullまたはundefinedになるとTypeScriptが判断するシナリオがあります。ただし、この変数をnullにできないことが確実な場合は、この演算子を使用できます。

例を考えてみましょう:

let a = document.getElementById('hello');

if (a) {
    a.style.width = '100px';
}

TypeScriptは、この要素が存在する保証がないため、変数aがnullであると想定しています。そのため、その変数にアクセスする前に、ifガードを設定しました。ただし、アプリケーションに常に#hello、上記のコードを次のように書き換えることができます。

const a = document.getElementById('hello');

a!.style.width = '100px';

上記のコードは読みやすく、冗長ではありません。詳細はこちらをご覧ください https://www.typescriptlang.org/docs/handbook/release-notes/TypeScript-2-0.html

編集:@Simonによる技術的に正しいコメント:具体的には、操作x! nullおよび未定義の除外を含むx型の値を生成します。

21
Harshal Patil

それは「明確な代入アサーション」です:varname !: sometypeは、TypeScriptにvarnameが割り当てられていないかどうかをチェックしないように通知します(TypeScriptは、_Scriptが割り当てられている場所を推測できない場合でも、varnameが確実に割り当てられることを通知します)。通常、TypeScriptは変数が割り当てられていないかどうかを確認し、エラーを返します。

詳細については、以下を参照してください: https://www.typescriptlang.org/docs/handbook/release-notes/TypeScript-2-7.html#definite-assignment-assertions

3
iislucas