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

如何修正extractIdFromObject函数的TypeScript类型推导,获取正确U类型?

解决TypeScript泛型函数无法正确推断id类型的问题

这个问题核心是原泛型定义的方式让TypeScript没办法准确推断出U的类型,咱们可以通过两种调整方式来修复:

方案一:直接从泛型T中提取id的类型

修改函数的返回类型为T['id'],这样TypeScript会直接从传入的对象类型里提取id属性的类型:

function extractIdFromObject<T extends { id: unknown }>(item: T): T['id'] {
  return item.id;
}

方案二:直接将U作为id属性的类型

简化泛型定义,让U直接对应id的类型,TypeScript会自动从传入的item.id值推断出U的具体类型:

function extractIdFromObject<U>(item: { id: U }): U {
  return item.id;
}

测试验证

用这两种方式重新定义函数后,再执行你的测试代码,TypeScript就能正确推断变量类型了:

const x = extractIdFromObject({ id: 1 }); // x: number
const y = extractIdFromObject({ id: "1" }); // y: string
const z = extractIdFromObject({ id: {} }); // z: {}

原代码问题原因

原代码function extractIdFromObject<T extends { id: U }, U>(item: T) { return item.id; }中,泛型U没有明确的推导来源——TypeScript无法从T的约束里确定U的具体类型,所以默认会将U推断为{},导致所有返回值的类型都变成了{}。而调整后的两种方案都明确了类型推导的依据,让TypeScript能准确获取id的真实类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:29:29