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

TypeScript如何实现接收键key和新值更新对象指定字段的方法

TypeScript 类型报错解决方案

你当前代码的类型报错核心是key与value的类型未做关联绑定。key: keyof SomeObject和value: SomeObject[keyof SomeObject]均为联合类型,TypeScript无法保证二者的对应关系,比如允许传入key="key1"且value=123的不符合实际字段类型的入参,因此赋值操作会触发类型校验失败。

修正方案

通过泛型约束关联key和value的类型,修改setValue方法定义即可,完整代码如下:

interface SomeObject {
  key1: string;
  key2: number;
  key3: boolean;
}

class SomeClass {
  public fields: {
    [field in keyof SomeObject]: SomeObject[field];
  };

  constructor() {
    this.fields = {
      key1: "",
      key2: 123,
      key3: false,
    };
  }

  // 新增泛型约束关联key和value类型
  setValue = <K extends keyof SomeObject>(
    key: K,
    value: SomeObject[K],
  ): void => {
    this.fields[key] = value;
  };
}

方案说明

泛型参数K会自动捕获传入的key的具体类型,value的类型会被约束为该key对应的SomeObject字段类型,确保二者类型严格匹配,即可解决赋值时的类型报错问题,同时调用方法时也会有对应的类型提示和校验。

内容的提问来源于stack exchange,提问作者Святослав Марюха

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:48:03