我有这种类型的定义:
export type StringOrErrorCallback = (error: ?Error, result: string) => void;
error
显然可以为空。
但是,我希望result
仅在error
不真实时才存在。
如果我这样做:
export type StringOrErrorCallback = (error: ?Error, result?: string) => void;
我使result
可选,因此对于此函数的调用者来说一切正常,但用户不仅需要检查error
参数,还需要检查{{1参数。
result
答案 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');
我不认为此时可以正常完成,但也许有人有一些好主意...