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

泛型类型参数联合是否等价于对应泛型类型的联合?

结论是否成立的说明

这个结论并非在所有情况下都成立,具体取决于WhateverType的实现方式:

成立的场景:分布式条件类型

当WhateverType是基于裸类型参数的分布式条件类型时,等式成立。TypeScript的条件类型会自动对联合类型的每个成员进行分发处理。

示例:

type WhateverType<T, D> = T extends string ? D : never;

// 此时以下两个类型等价
type Result1 = WhateverType<string | number, boolean>; // boolean
type Result2 = WhateverType<string, boolean> | WhateverType<number, boolean>; // boolean | never → boolean

不成立的场景:非分布式泛型

如果WhateverType的实现不属于分布式条件类型(比如参数被包裹在数组、对象或元组中,或是普通泛型结构),等式就不成立。

示例1:参数被包裹在元组中

type WhateverType<T, D> = [T, D];

// 两个结果完全不同
type Result1 = WhateverType<string | number, boolean>; // [string | number, boolean]
type Result2 = WhateverType<string, boolean> | WhateverType<number, boolean>; // [string, boolean] | [number, boolean]

示例2:普通对象泛型

type WhateverType<T, D> = { value: T; data: D };

// 前者是单类型对象(value为联合类型),后者是对象的联合类型,两者不等价
type Result1 = WhateverType<string | number, boolean>; // { value: string | number; data: boolean }
type Result2 = WhateverType<string, boolean> | WhateverType<number, boolean>; // { value: string; data: boolean } | { value: number; data: boolean }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 16:10:23