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

如何根据对象的键推断值类型并确保新值类型匹配?

如何根据对象的键推断对应值的类型?

你的原函数中,newValue的类型被推断为对象所有值类型的联合类型(number | string | boolean),所以即使传入与选中键不匹配的值也不会触发类型错误。要解决这个问题,需要通过额外的泛型参数来追踪具体的键,从而精准绑定对应的值类型。

修改后的函数实现

export const updateValueByKey = <I, K extends keyof I>(
  obj: I,
  keyToUpdate: K,
  newValue: I[K] // 现在会精准推断K对应的具体值类型
) => {
  obj[keyToUpdate] = newValue;
};

泛型参数说明

  • I:代表传入的对象类型
  • K extends keyof I:约束K必须是I的键之一,TypeScript会根据传入的keyToUpdate自动推断出具体的K类型
  • I[K]:通过索引类型查询,直接获取K键对应的具体值类型

验证效果

调用时传入不匹配的值会直接触发类型错误:

updateValueByKey(
  {
    id: 123,
    name: "Some Note",
    isPrivate: false,
  },
  "id",
  "not a number" // 此处会报错:类型"string"不能赋值给类型"number"
);

// 正确调用示例
updateValueByKey(
  { id: 123, name: "Some Note", isPrivate: false },
  "name",
  "Updated Name" // 类型匹配,无错误
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 10:45:37