如果我的函数中没有回调函数,我想返回一个promise。我的代码是这样的:
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));
当我编译时,我得到像Type 'void' is not assignable to Type 'Promise<boolean>'
如何解决?
答案 0 :(得分:2)
您的功能签名表示它将返回Promise
。但是当你有回调时,你就不会返回Promise
。将返回类型更改为Promise | void
将解决此问题。
您还可以添加多个类型签名,以便在它返回void
时及其返回Promise
时准确清楚。这样你就不必检查每次使用时实际返回的类型。
这里是固定代码。我还将类型参数<boolean>
添加到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));
}
答案 1 :(得分:0)
使用重载:
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);
}