TypeScript如何定义满足两种互斥函数签名的回调类型?
TypeScript 类型编码回调函数的参数规则
我最近在用一个第三方库,它对回调函数的参数有个挺严格的要求:要么只传一个Error类型的错误作为第一个参数,要么第一个参数传undefined,同时第二个参数传string类型的值。简单说就是不能同时传错误和有效值,也不能啥都不传。
为了让TypeScript帮我自动校验这个规则,避免写出不符合要求的调用代码,我用重载类型定义了这个回调:
type Callback = { (error: undefined, value: string): void; (error: Error): void; } function doThings(c: Callback) { // 合法:无错误,传入有效数值 c(undefined, '1'); // 下面这些写法都会被TypeScript报错: // c(new Error('出错了'), '无效值'); // 同时传错误和值,不合法 // c(undefined); // 只传undefined,没传值,不合法 // c(); // 啥都不传,不合法 }
这样定义之后,只要调用回调时不符合规则,TypeScript就会立刻给出提示,帮我提前规避不符合第三方库要求的写法,太省心了!
内容的提问来源于stack exchange,提问作者Letharion
相关产品推荐
相关产品推荐

