来自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);
视为错误,但我希望它是。value
被视为string
。我不需要检查它的类型,TS很高兴我有一个像{ value.charAt(0); }
这样的函数体,而我希望它抱怨值可能是未定义的。答案 0 :(得分:2)
编译器允许第3次调用c(undefined)
,因为默认情况下TypeScript类型可以为空。只需启用 strictNullChecks 编译器设置(请参阅Playground中的选项下拉列表) - 您将看到调用将生成错误。
我想与第一个答案类似 - strictNullChecks 会有所帮助。