Überprüfung des Nullwerttyps
P粉896751037
2023-08-03 11:34:29
<p>Ich habe gerade eine Methode in einem Dienst geschrieben, aber ich stoße auf ein Problem, bei dem der Typ darauf hinweist, dass ich möglicherweise einen Nullwert zurückgebe, obwohl ich im if-Anweisungsblock eine Nullprüfung durchgeführt habe. </p>
<pre class="brush:php;toolbar:false;">public async getUserById(id: string): Promise<UserEntity>
const user = this.userRepository.getById(id); // gibt <UserEntity | zurück.
if (!user) { // auf Null prüfen
throw new NotFoundUser(`Nicht gefundener Benutzer`);
}
// Typ „UserEntity |. null“ kann nicht dem Typ „UserEntity“ zugewiesen werden.
// Typ „null“ kann nicht dem Typ „UserEntity“ zugewiesen werden.
Benutzer zurückgeben;
}</pre>
<p>Ich möchte eine Ausnahme auslösen, wenn die Benutzervariable leer ist, und andernfalls die UserEntity zurückgeben. <br /><br />Wenn ich dort zwei Ausrufezeichen setze, ist das Problem gelöst. </p><p><br /></p>
<pre class="brush:php;toolbar:false;">if (!!user) { // auf Null prüfen
throw new NotFoundUser(`Nicht gefundener Benutzer`);
}</pre>
<p>Aber wenn ich !!null in die Konsole eingebe, wird false zurückgegeben, sodass ich in diesem Fall nie in eine Situation komme, in der eine Ausnahme ausgelöst wird. Warum tritt dieses Verhalten auf? </p>
因为 !! 类似于 Boolean,所以在这行代码中,你做了类似于 Boolean(null) 的操作,所以你会得到 false,因为在布尔值中,null 是 false。你可以使用 user === null 来检查是否为 null。