You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript重载匹配错误:异步回调返回类型不符合预期

解决TypeScript重载返回类型不匹配问题

问题原因

你当前的第二个重载返回类型定义为void | Promise<void>,导致TypeScript在匹配异步回调时无法正确推断出应返回Promise<void>;同时重载签名和实际期望的返回类型不匹配,引发了类型推断错误。

解决方案

调整重载的返回类型定义,让异步回调对应的重载明确返回Promise<void>,实现函数的返回类型保持兼容即可:

import cluster from 'cluster';

class Foo {
    // 同步回调:返回void
    public runInWorker(cb: () => void): void;
    // 异步回调:返回Promise<void>
    public runInWorker(cb: () => Promise<void>): Promise<void>;
    // 实现函数:返回类型兼容两个重载的联合类型
    public runInWorker(cb: () => void | Promise<void>): void | Promise<void> {
        if (cluster.isPrimary ?? cluster.isMaster) {
            return;
        }

        return cb();
    }
}

验证结果

  • 同步回调场景:
    // result类型为void,符合预期
    const result = new Foo().runInWorker(() => {})
    
  • 异步回调场景:
    // result类型为Promise<void>,符合预期
    const result = new Foo().runInWorker(async () => {})
    

原理说明

TypeScript的重载匹配机制会根据传入参数的类型优先匹配最精确的重载签名。当传入async回调时,其返回类型为Promise<void>,会精准匹配第二个重载,从而推断出返回类型为Promise<void>;实现函数的返回类型void | Promise<void>同时兼容两个重载的返回类型,符合TypeScript的类型检查规则。

内容的提问来源于stack exchange,提问作者Lehks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 06:06:05