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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 12:10:20