【发布时间】:2018-06-02 02:38:02
【问题描述】:
来自Typescript, require either of two function signatures的后续问题
我的代码得到一个回调,我希望要么向它传递一个错误,或者不定义第一个参数并将数据作为第二个参数传递。
我已经定义了一个接口来描述这个:
type Callback = {
(error: undefined, value: string): void;
(error: Error): void;
}
function doThings(c: Callback) {
// Valid, no error, and a useful value.
c(undefined, '1');
// Valid, something went wrong, so we pass in an error, but no value.
c(new Error());
// Not valid, but accepted by TS playground:
c(undefined);
}
function cOverload(error: undefined, value: string): void;
function cOverload(error: Error): void;
function cOverload(error: undefined | Error, value?: string) { }
doThings(cOverload)
这段代码有两个问题,我认为这两个问题都归结为我如何定义函数签名。
-
c(undefined);不被 TS 视为错误,但我希望如此。 - 在cOverload的实现中,
value被认为是string。我不需要检查它的类型,TS 很高兴我有一个像{ value.charAt(0); }这样的函数体,而我希望它抱怨值可能未定义。
【问题讨论】:
标签: typescript