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

TypeScript如何通过for循环修改对象属性并解决赋值语法报错

错误原因

  1. 点语法无法识别动态变量:你写searchBody.constrain.name.key时,TypeScript会将key识别为固定的属性名,而非你循环中定义的变量,同时你的searchFilterObject接口中不存在key这个属性,直接触发类型报错。
  2. 类型不匹配:for...in循环得到的key默认是string类型,直接用作对象索引时,TypeScript无法确认该key是否属于目标对象的合法属性,会触发隐式any类型报错。
  3. 业务逻辑不匹配:你当前遍历的是searchBody.type.name的属性(name/last_name/email等),但searchBody.constrain.name的合法属性是contain/equal_to等,两者属性完全不重叠,就算语法修正后也无法正常赋值。

修正方案

首先明确你的业务目标,分两种场景处理:

场景1:需要更新searchBody.type.name下对应序号的属性为true

// 先提取合法的属性列表,加类型断言告诉TS这些key都是searchByObject的合法属性
const typeKeys = Object.keys(searchBody.type.name) as Array<keyof searchByObject>;
for (let n = 0; n < typeKeys.length; n++) {
  if (this.searchBy === n.toString()) {
    // 动态属性访问用方括号语法
    searchBody.type.name[typeKeys[n]] = true;
  }
}

场景2:需要更新searchBody.constrain.name下对应序号的匹配规则为true

const constrainKeys = Object.keys(searchBody.constrain.name) as Array<keyof searchFilterObject>;
for (let n = 0; n < constrainKeys.length; n++) {
  if (this.searchBy === n.toString()) {
    searchBody.constrain.name[constrainKeys[n]] = true;
  }
}

额外注意

你原来的代码中searchBy: string = ''缺少变量声明关键字,如果是局部变量请补充let/const,如果是类属性请在类定义中声明类型即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 05:30:02