TypeScript:如何将索引访问类型限制为对象键对应类型?
如何让索引类型严格对应对象键的原类型?
你当前的问题出在Record<keyof Schema, Schema[keyof Schema]>这个写法上——Schema[keyof Schema]会把Schema里所有属性的类型合并成一个联合类型,所以用它作为Record的值类型时,每个键都能接受联合里的任意类型,自然就出现了name: 1这种不符合预期的情况。
解决方法很简单,直接用Partial<Schema>代替原来的Partial+Record组合就行:
interface User { id: string, name: string, age: number, token: string | null, } interface Updates<Schema> { set: Partial<Schema>; } const test: Updates<User> = { set: { name: 1 // 这里现在会触发类型错误,符合你的要求 } }
如果想更清晰地展示映射逻辑,也可以写成显式的映射类型(和上面的写法效果完全一致):
interface Updates<Schema> { set: Partial<{ [K in keyof Schema]: Schema[K] }>; }
这种写法会逐个遍历keyof Schema里的每个键K,为每个键绑定对应的Schema[K]类型,确保每个属性只能接受原对象里定义的类型,不会出现跨类型赋值的情况。
内容的提问来源于stack exchange,提问作者Arda
相关产品推荐
相关产品推荐

