提问者:小点点

如果typescript中没有回调,则返回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));

当我编译时,我会遇到这样的错误:类型'void'不可以分配给类型'promise<;boolean>

怎么能修好呢?


共2个答案

匿名用户

您的函数签名表示它将返回一个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);
}