typescript - Inslagen union misslyckas med "Argument av typen... kan inte tilldelas typen..." - Varför?


Jag försöker att kapsla in en Bull.js-kö i min egen klass (för kapsling och vidare bearbetning, etc). När jag kapslar in Bull Queue-instansen misslyckas tsc med Argument of type 'string | ((job: Job, done: Function) => void) | ((job: Job) => Promise)' is not assignable to parameter of type 'string'

Kompileringen fungerar om jag tar bort "|string" från signaturen för omslagsmetodens callback:.

Den faktiska koden: (detta misslyckas)

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

Det här fungerar:

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

Av intuition förväntade jag mig att omsluta en funktion och spegla dess parametertsignaturer uppenbarligen skulle kompilera.

Varför fungerade min "fix"? Och varför misslyckades originalet? Ditt svar kommer att hjälpa mig att förstå unionstyper!