Devolver promesa si no hay callback en TypeScript
Quiero devolver una promesa si no hay un callback en mi función. Mi código es así:
function dropDatabase(callback?: (error: Error, result: boolean) => void): Promise<boolean> {
if (typeof callback === 'function') return callback(null, true);
return new Promise((resolve, reject) => resolve(true));
}
// using
dropDatabase((err, droped) => console.log(droped));
dropDatabase().then(droped => console.log(droped));
Cuando compilo, obtengo un error como este Type 'void' no se puede asignar al tipo 'Promise<boolean>'
¿Cómo puedo arreglarlo?
Respuesta #1
La firma de tu función dice que devolverá un Promise. Pero cuando tienes un callback, no estás devolviendo un Promise. Cambiar el tipo de retorno a Promise | void solucionará eso.
También puedes añadir múltiples firmas de tipo para dejar claro exactamente cuándo devuelve void y cuándo devuelve un Promise. De esa manera, no tendrás que verificar qué tipo devolvió realmente en cada uso.
Aquí está el código corregido. También añadí el argumento de tipo <boolean> a Promise.
function dropDatabase(callback: (error: Error, result: boolean) => void);
function dropDatabase(): Promise<boolean>;
function dropDatabase(callback?: (error: Error, result: boolean) => void): Promise<boolean> | void {
if (typeof callback === 'function') return callback(null, true);
return new Promise((resolve, reject) => resolve(true));
}
Respuesta #2
Usa la sobrecarga:
function dropDatabase(callback: (error: Error, result: boolean) => void);
function dropDatabase(): Promise<boolean>;
function dropDatabase(callback?: (error: Error, result: boolean) => void):
void | Promise<boolean> {
if (callback) callback(new Error("error"), true);
else return Promise.resolve(true);
}
