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

TypeScript:如何在extends子句中推导泛型类型?

解决方法

当然可以,你只需要通过索引类型查询从TData中提取id的类型,同时保留对id类型的约束(必须是number或string)。

修改后的函数写法如下:

// 约束TData必须包含id属性,且id的类型是number或string
function create<TData extends { id: number | string }>() {
  // 在这里可以通过 TData['id'] 获取id的具体类型
  type Id = TData['id'];
  // 后续逻辑可直接使用这个Id类型
}

// 使用示例
type User = { id: number, name: string }
create<User>(); // 无需传入第二个类型参数,TS自动推导Id为number

type Post = { id: string, title: string }
create<Post>(); // Id自动推导为string

如果需要在函数参数或返回值中用到Id类型,直接用TData['id']替代即可,比如:

function create<TData extends { id: number | string }>(): TData['id'] {
  return {} as TData['id'];
}

const userId = create<User>(); // userId类型自动推导为number

这样就完全不需要手动传入第二个泛型参数,TypeScript会自动从你指定的TData中提取id的类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 07:09:50