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

如何实现修改指定类型单个属性的TypeScript泛型?

解决TypeScript泛型修改单个属性类型的问题

你要实现的是修改类型中单个属性的泛型,问题出在你写的[M in keyof K]这里——K已经是单个属性键(比如'age'),直接遍历K就行,不用加keyof。

错误原因

你的代码里[M in keyof K]会遍历K这个类型的键,而不是K本身。比如当K是'age'时,keyof K并不是'age',这就导致生成的类型和预期不符,进而出现赋值错误。

正确实现

把keyof K改成K就可以了:

export type AlterAttribute<T, K extends keyof T, P> = Omit<T, K> & { [M in K]: P }

验证示例

用你的Person类型测试:

type Person = { name: string, age: number }
type UpdatedPerson = AlterAttribute<Person, 'age', string>
// UpdatedPerson 等价于 { name: string, age: string }

// 赋值也不会报错了
const person: AlterAttribute<Person, 'age', number> = { name: 'Joe', age: 10 };

这样就能完美实现你想要的修改单个属性类型的效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 14:04:55