Null値の型チェック
<p>サービスにメソッドを作成したところですが、if ステートメント ブロックで null チェックを行ったにもかかわらず、型が null 値を返す可能性があるという問題が発生しました。 </p>
<pre class="brush:php;toolbar:false;">public async getUserById(id: string): Promise<UserEntity> {
const user = this.userRepository.getById(id); //
を返します。
if (!user) { // null をチェックする
throw new NotFoundUser(`見つからないユーザー`);
}
// 型 'UserEntity | null' は型 'UserEntity' に割り当てることができません。
// 型 'null' は型 'UserEntity' に割り当てることができません。
リターンユーザー。
}</pre>
<p>ユーザー変数が空の場合は例外をスローし、空でない場合は UserEntity を返したいと考えています。 <br /><br />そこに感嘆符を 2 つ入れると、問題は解決します。 </p>
<pre class="brush:php;toolbar:false;">if (!!user) { // null をチェックする
throw new NotFoundUser(`見つからないユーザー`);
}</pre>
<p>しかし、コンソールに !!null と入力すると false が返されるため、この場合、例外がスローされる状況には陥りません。なぜこのような動作が起こるのでしょうか? </p>