如何实现修改指定类型单个属性的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
相关产品推荐
相关产品推荐

