【问题标题】:Return promise if no callback in typescript如果打字稿中没有回调,则返回承诺
【发布时间】:2017-10-02 22:36:45
【问题描述】:

如果我的函数中没有回调,我想返回一个承诺。我的代码是这样的:

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&lt;boolean&gt;'

如何解决?

【问题讨论】:

  • 不要。只需总是返回一个承诺。

标签: typescript callback promise


【解决方案1】:

你的函数签名说它会返回一个Promise。但是当您有回调时,您不会返回Promise。将返回类型更改为 Promise | void 将解决此问题。

您还可以添加多个类型签名以明确何时返回void 以及何时返回Promise。这样您就不必在每次使用时检查它实际返回的类型。


这是固定代码。我还将类型参数&lt;boolean&gt; 添加到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));
}

【讨论】:

    【解决方案2】:

    使用重载:

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

    【讨论】:

      猜你喜欢
      • 2019-04-25
      • 2017-10-21
      • 2019-09-08
      • 2016-06-15
      • 1970-01-01
      • 2017-08-02
      • 1970-01-01
      • 2018-01-21
      • 2020-05-11
      相关资源
      最近更新 更多