pregunta sobre el patrón encontrado de return null en TypeScript
Si tengo una interfaz User de la siguiente manera:
export interface User {
username: string;
hash: string;
}
y tengo una firma de método que se ve así y que devuelve un User típicamente desde una base de datos
function getUser(username: string): Promise<User>
Entonces, en un programa que llama, querría hacer algo como esto:
const user: User = await getUser(username);
if (user && (await passMatch(password, user.hash))) {
return genToken();
}
¿Cuáles son algunos patrones populares de tipos de retorno y combinaciones de validación cuando el usuario no se encuentra?
En Java (correcto o incorrecto) devolvería null y haría una verificación de null.
¿Es un error throw not found y capturarlo, un buen patrón? No puedo reconciliar que no encontrar uno no sea un error.
Respuesta #1
Si no encontrar un usuario no es un error, entonces deberías cambiar la firma del método así:
function getUser(username: string): Promise<User | null>
Luego, dentro del(los) método(s) que llama, deberías lanzar un error si se ajusta a la regla del método (además, no necesitarías el : User ya que es implícito por el método):
const user = await getUser(username);
if (!user) throw new Error...
if ((await passMatch(password, user.hash))) {
return genToken();
}
O si en realidad no necesitas lanzar un error, simplemente mantenlo como lo estás haciendo dentro del método.
Además, probablemente cambiaría ese await dentro del if:
const passwordCorrect = await passMatch(password, user.hash);
if (!passwordCorrect) {
throw...
}
return genToken();
PD:
Si quieres usar buenos patrones y aplicarlos en tu proyecto, te aconsejo encarecidamente que uses lint. Recomiendo la configuración de TypeScript de Airbnb:
https://www.npmjs.com/package/eslint-config-airbnb-typescript
