网站搜索

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)
    }

凭直觉,我本以为包装一个函数并镜像它的参数签名显然可以编译。

为什么我的“修复”有效?原来的为什么会失败?你的答案将帮助我理解联合类型!