如果函数中没有回调,我想返回一个承诺。我的代码是这样的:
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));
当我编译时,我会遇到这样的错误:类型'void'不可以分配给类型'promise<;boolean>
怎么能修好呢?
您的函数签名表示它将返回一个promise
。但是当您有回调时,您不会返回promise
。将返回类型更改为promise void
将解决这个问题。
您还可以添加多个类型签名,以便明确它何时返回void
以及何时返回promise
。这样,您就不必在每次使用时检查它实际返回的类型。
这是固定代码。我还向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));
}
使用重载:
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);
}