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

如何正确使用内部结构不同的TypeScript联合类型

报错原因

这并非TypeScript的bug,属于其类型系统的现有设计限制。TypeScript对联合类型的属性推导是独立处理的,不会自动跟踪同一实例多个属性之间的关联关系:
当从Categories联合类型的参数中分别读取testName和name属性时,TS只会将两个属性各自推导为'category1' | 'category2'的联合类型,不会感知到二者必然来自同一个联合分支、取值一定是匹配的。因此拼接成对象后,TS会判定该对象无法匹配ComputedCategories要求的「两个属性取值必须同属一个分支」的约束,进而抛出类型错误。

解决方案

无需编写类型守卫,可通过泛型约束实现类型匹配,是最推荐的写法:

// 通过泛型绑定入参与返回值的属性对应关系
const computeCategory = <T extends Categories>(category: T): Extract<ComputedCategories, { computed: T['testName'] }> => ({
    computed: category.testName,
    name: category.name
})

如果仅需要临时快速修复,确定业务逻辑不存在非法入参的情况下,也可以直接使用类型断言:

const computeCategory = (category: Categories): ComputedCategories => ({
    computed: category.testName,
    name: category.name
} as ComputedCategories)

内容的提问来源于stack exchange,提问作者C. Johnson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 14:00:01