满口金牙 2023-03-19 16:37 采纳率: 91.5%
浏览 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日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效