Pemeriksaan jenis nilai nol
P粉896751037
2023-08-03 11:34:29
<p>Saya baru sahaja menulis kaedah dalam perkhidmatan, tetapi saya menghadapi masalah di mana jenis membayangkan bahawa saya mungkin mengembalikan nilai nol, walaupun saya telah melakukan semakan nol dalam blok pernyataan if. </p>
<pre class="brush:php;toolbar:false;">public async getUserById(id: string): Janji<UserEntity>
const user = this.userRepository.getById(id); // mengembalikan <UserEntity |.
jika (!pengguna) { // menyemak nol
buang NotFoundUser baru(`Tidak ditemui pengguna`);
}
// Taip 'UserEntity |. tidak boleh ditugaskan untuk menaip 'UserEntity'.
// Taip 'null' tidak boleh diberikan untuk menaip 'UserEntity'.
kembali pengguna;
}</pre>
<p>Saya ingin membuang pengecualian jika pembolehubah pengguna kosong dan mengembalikan UserEntity jika tidak. <br /><br />Jika saya meletakkan dua tanda seru di sana, masalahnya telah selesai. </p><p><br /></p>
<pre class="brush:php;toolbar:false;">if (!!pengguna) { // menyemak nol
buang NotFoundUser baru(`Tidak ditemui pengguna`);
}</pre>
<p>Tetapi jika saya menaip !!null dalam konsol, ia akan kembali palsu, jadi dalam kes ini saya tidak pernah mengalami situasi di mana pengecualian dilemparkan. Mengapakah tingkah laku ini berlaku? </p>
Oleh kerana !! adalah serupa dengan Boolean, jadi dalam baris kod ini, anda melakukan sesuatu yang serupa dengan Boolean(null), jadi anda akan mendapat false, kerana dalam boolean, null adalah false. Anda boleh menggunakan pengguna === null untuk menyemak sama ada ia adalah null.