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

如何让TypeScript对象类型根据属性值自动推断泛型参数?

解决方案

要实现让TypeScript根据a的取值自动推断泛型T,你可以借助泛型函数来完成——TypeScript对函数的泛型参数支持自动推断,而直接使用泛型类型别名时必须显式指定参数。

具体实现如下:

type MyLiterals = 'a' | 'b'

type MyObject<T extends MyLiterals> = {
    a: T,
    b: T extends 'a' ? number : string
}

// 泛型函数用于自动推断类型
function createMyObject<T extends MyLiterals>(obj: MyObject<T>): MyObject<T> {
    return obj
}

// 无需手动指定泛型,TS自动推断T为'b',b被约束为string类型
const obj1 = createMyObject({
    a: 'b',
    b: ''
})

// a为'a'时,TS自动推断T为'a',b必须是number类型
const obj2 = createMyObject({
    a: 'a',
    b: 123
})

// 错误示例:a为'a'时传入string类型的b会触发类型检查报错
const obj3 = createMyObject({
    a: 'a',
    b: 'error' // 类型“string”的参数不能赋给类型“number”的参数
})

原理说明

  • 直接使用MyObject类型注解时,TypeScript无法自动推断泛型参数T,必须显式传入,这是泛型类型别名的固有特性。
  • 泛型函数的参数可以利用上下文类型推断,根据传入对象中a的取值自动确定T的类型,进而约束b的类型,完全匹配你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 11:40:12