typescript - 包装的联合类型出现“类型…的参数不可分配给类型…”错误 - 为什么?
我正在尝试将 Bull.js 队列封装到我自己的类中(为了封装和进一步处理等)。在封装 Bull Queue 实例时,tsc 报错:类型为 'string | ((job: Job, done: Function) => void) | ((job: Job) => Promise)' 的参数不能赋值给类型为 'string' 的参数
如果我从包装方法的 callback: 签名中移除“|string”,编译就能正常工作。
实际代码:(这个会失败)
async process(name: string, callback: ((job: Job<any>, done: Function) => void) | ((job: Job<any>) => Promise<any>) | string, concurrency = 1): Promise<void> {
await this.queue.process(name, concurrency, callback)
}
这个有效:
async process(name: string, callback: ((job: Job<any>, done: Function) => void) | ((job: Job<any>) => Promise<any>), concurrency = 1): Promise<void> {
await this.queue.process(name, concurrency, callback)
}
凭直觉,我本以为包装一个函数并镜像它的参数签名显然可以编译。
为什么我的“修复”有效?原来的为什么会失败?你的答案将帮助我理解联合类型!