重载函数类型

时间:2017-01-21 11:32:33

标签: javascript flowtype

问题

我有这种类型的定义:

export type StringOrErrorCallback = (error: ?Error, result: string) => void;

error显然可以为空。

但是,我希望result仅在error不真实时才存在。

如果我这样做:

export type StringOrErrorCallback = (error: ?Error, result?: string) => void;

我使result可选,因此对于此函数的调用者来说一切正常,但用户不仅需要检查error参数,还需要检查{{1参数。

实施例

result

1 个答案:

答案 0 :(得分:0)

我几乎认为它不是一个好的解决方案(尽管它确实有效),但我只是发现它们是如何在内部为原生函数做的。

export type ResultOrErrorCallback = (error: ?Error, result: any) => void;

function doSomething(error, result: string) {
  if (error) {
    return console.error(error);
  }
  // it's a given that "result" exists at this point
}

doSomething(new Error('something happened'));
doSomething(null, 'resulting string');

我不认为此时可以正常完成,但也许有人有一些好主意...