如果打字稿中没有回调,则返回承诺

时间:2017-05-04 16:17:53

标签: typescript callback promise

如果我的函数中没有回调函数,我想返回一个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>'

这样的错误

如何解决?

2 个答案:

答案 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);
}