2021-11-22 TypeScript Non-Null Assertion Operator
TypeScript でみかけた !
マークについて調べてみた。
Non-Null Assertion Operator
非nullアサーション演算子(Non-Null Assertion Operator) について。
新しい!ポストフィックス式演算子を使用して、型チェッカーが結論付けられないコンテキストにおいて、そのオペランドが非nullでかつ非undefinedであることをアサートすることができます。
strictNullChecks - TypeScript Deep Dive 日本語版
// Compiled with --strictNullChecks
function validateEntity(e?: Entity) {
// Throw exception if e is null or invalid entity
}
function processEntity(e?: Entity) {
validateEntity(e);
let a = e.name; // TS ERROR: e may be null.
let b = e!.name; // OKAY. We are asserting that e is non-null.
}
Definite Assignment Assertion Operator)
class C {
foo: number; // OKAY as assigned in constructor
bar: string = "hello"; // OKAY as has property initializer
baz: boolean; // TS ERROR: Property 'baz' has no initializer and is not assigned directly in the constructor.
constructor() {
this.foo = 42;
}
}
プロパティ名に後置された完全な代入アサーションを使用して、コンストラクタ以外の場所で初期化することをTypeScriptに通知することができます。
class C {
foo!: number;
// ^
// Notice this exclamation point!
// This is the "definite assignment assertion" modifier.
constructor() {
this.initialize();
}
initialize() {
this.foo = 0;
}
}