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

TypeScript条件泛型拆分联合类型问题咨询

问题分析与解决

原因:分布式条件类型的自动分发

你遇到的问题源于TypeScript的分布式条件类型特性:当条件类型的泛型参数是联合类型时,TypeScript会自动将联合类型的每个成员单独代入条件判断,再把所有结果合并成新的联合类型。

在你的代码中,VoidFunctionOrWithParams<'one' | 'two'>会被拆解执行:

  • 代入'one':'one' extends void不成立,返回(params: 'one') => void
  • 代入'two':'two' extends void不成立,返回(params: 'two') => void
  • 最终合并为联合类型((params: "one") => void) | ((params: "two") => void)

解决办法:阻止条件类型的分发

要让联合类型作为一个整体参与条件判断,只需把泛型参数用方括号[]包裹,破坏分布式条件类型的触发条件:

type VoidFunctionOrWithParams<Params> = [Params] extends [void]
    ? VoidFunction
    : (params: Params) => void;

此时再使用:

type WithStringParams = VoidFunctionOrWithParams<'one' | 'two'>;

得到的结果就是你期望的:

(params: 'one' | 'two') => void

边界场景验证

当传入void时,依然能正确返回VoidFunction:

type VoidFn = VoidFunctionOrWithParams<void>; // 类型为 VoidFunction

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:48:27