用途:在 TypeScript 中为「返回类型依赖输入类型」的函数编写类型签名时,用条件类型替代多个重载签名。
主要能力:条件类型对联合类型自动分发,可把 string | number 这类输入映射为对应的 string | number 返回类型;单一签名比多个重载更易维护,避免重载各自独立检查而漏掉联合输入的问题。示例:declare function double<T extends string | number>(x: T): T extends string ? string : number; 传入联合类型时返回类型正确分发。典型场景是事件处理器,用映射类型加泛型单签名取代每个事件类型一个重载。
实现建议:对外用一个含条件类型的签名,函数体内用较简单的联合参数与联合返回类型实现。
限制与例外:当函数实际是两类完全不同的操作、联合情况不合理、或参数数量与形状不同时(如 Node 的 readFile 回调版与 Promise 版),重载可能更清晰。资料强调应测试联合输入场景、考虑是否需要分发、评估后续维护成本。