Promise#catch onrejected处理程序的TypeScript签名

时间:2016-08-29 03:58:16

标签: typescript promise

我注意到es6-shim.d.tsPromise#catch的标准输入定义为

interface Promise<T> {
  catch(onrejected?: (reason: any) => T | PromiseLike<T>): Promise<T>;
  catch(onrejected?: (reason: any) => void): Promise<T>;
}

我想知道为什么这是用这种方式写的,而不是

catch(onrejected?: (reason: any) => T | PromiseLike<T> | void): Promise<T>;

Nate Archibald的其他文件es6-promise.d.ts给出了

的单一签名
catch<U>(onRejected?: (error: any) => U | Thenable<U>): Promise<U>;

根本没有提到<T>

es6.shim-d-ts中的第二个重载签名也是如此,据我所知,在编译到ES5环境中大量使用,不必要/不合需要?

1 个答案:

答案 0 :(得分:2)

好吧,T可以是void,这意味着您的用例已经受到支持。

如果您T | PromiseLike<T> | void输出的输出可能是Promise<string>,则void解决了reason这可能是类型错误。

请注意,在这些定义中,承诺不会以强有力的方式静态输入。由于any已键入/build,因此签名实际上更难。这就像大多数语言(如C#)一样运行未经检查的异常,而不像Java和Swift那样具有检查异常(函数签名的一部分就是它可能抛出的东西)。