满口金牙 2023-03-19 16:37 采纳率: 91.1%
浏览 75
已结题

Typescript ,iterp$index] 报错问题请教

  1,  下面的代码,运行正常,便是ts会报错
            <template v-for="(col, $index) in data " :key="$index">
                 <td >
                         <input v-model="item[$index]"  />
                  </td>
             </template>
 item[$index] 这个位置报错,
  报错信息:元素隐式具有 "any" 类型,因为类型为 "string | number" 的表达式不能用于索引类型 "Rules"。
  在类型 "Rules" 上找不到具有类型为 "string" 的参数的索引签名。ts(7053)
      


  2, 于是我改成这样
              <template v-for="(col, $index) in data " :key="$index">
                       <td >
                             <input v-model="item[$index in keyof Rules]"  /> 
                       </td>
               </template>

item[$index in keyof Rules]"还是报错,  
报错信息: v-model value must be a valid JavaScript member expression.vue(42)

  • 写回答

7条回答 默认 最新

  • 眉山央央an 2023-03-19 20:41
    关注

    哥哥第一个错误是因为 TypeScript 无法确定 item 数组中的元素类型。您可以显式设置其类型,以便 TypeScript 能够知道该数组包含什么类型的值。例如:

    // 假设 item 数组中的元素类型为 string
    item: Array<string> = [];
    

    第二个错误是因为 v-model 只接受合法的 JavaScript 成员表达式,而 $index in keyof Rules 并不符合这个要求。您可以将 v-model 表达式改为另一个变量,并在 JavaScript 中使用此变量来更新 item 数组的对应元素。例如:

    <template v-for="(col, $index) in data" :key="$index">
      <td>
        <input :value="item[$index]" @input="updateItem($index, $event.target.value)" />
      </td>
    </template>
    
    // 在 Vue 组件中添加 updateItem 方法
    updateItem(index: number, value: string) {
      // 更新 item 数组中对应的元素
      this.item.splice(index, 1, value);
    }
    

    哥哥你注意一下,在这种情况下,您需要在 JavaScript 中使用 splice 方法更新 item 数组的值,而不是通过修改数组索引来进行更新。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?

问题事件

  • 系统已结题 3月30日
  • 已采纳回答 3月22日
  • 创建了问题 3月19日

悬赏问题

  • ¥15 删除虚拟显示器驱动 删除所有 Xorg 配置文件 删除显示器缓存文件 重启系统 可是依旧无法退出虚拟显示器
  • ¥15 vscode程序一直报同样的错,如何解决?
  • ¥15 关于使用unity中遇到的问题
  • ¥15 开放世界如何写线性关卡的用例(类似原神)
  • ¥15 关于并联谐振电磁感应加热
  • ¥15 this signal is connected to multiple drivers怎么解决
  • ¥60 请查询全国几个煤炭大省近十年的煤炭铁路及公路的货物周转量
  • ¥15 请帮我看看我这道c语言题到底漏了哪种情况吧!
  • ¥66 如何制作支付宝扫码跳转到发红包界面
  • ¥15 pnpm 下载element-plus