Vérification du type de valeur nulle
P粉896751037
2023-08-03 11:34:29
<p>Je viens d'écrire une méthode dans un service, mais je rencontre un problème où le type laisse entendre que je pourrais renvoyer une valeur nulle, même si j'ai effectué une vérification nulle dans le bloc d'instruction if. </p>
<pre class="brush:php;toolbar:false;">public async getUserById(id: string): Promise<UserEntity>
const user = this.userRepository.getById(id); // renvoie <UserEntity | null>
if (!user) { // vérification de null
lancer un nouveau NotFoundUser(`Utilisateur introuvable`);
}
// Le type 'UserEntity | null' n'est pas attribuable au type 'UserEntity'.
// Le type 'null' n'est pas attribuable au type 'UserEntity'.
revenir utilisateur ;
}</pré>
<p>Je souhaite lever une exception si la variable utilisateur est vide et renvoyer l'entité utilisateur sinon. <br /><br />Si j'y mets deux points d'exclamation, le problème est résolu. </p><p><br /></p>
<pre class="brush:php;toolbar:false;">if (!!user) { // vérification de null
lancer un nouveau NotFoundUser(`Utilisateur introuvable`);
}</pré>
<p>Mais si je tape !!null dans la console, cela retournera false, donc dans ce cas, je ne me retrouve jamais dans une situation où une exception est levée. Pourquoi ce comportement se produit-il ? </p>
Parce que !! est similaire à Boolean, donc dans cette ligne de code, vous faites quelque chose de similaire à Boolean(null), donc vous obtiendrez false, car en booléen, null est faux. Vous pouvez utiliser user === null pour vérifier s'il est nul.