TS 对象动态key 类型报错问题

有的时候需要用动态key 给对象里的属性赋值或者取值
例子

1.先声明一个接口

interface ICityData {

  provinceCode: string

.......省略

}

2.创建了一个对象(vue3环境演示)

const changeRes: ICityData = reactive({

  provinceCode: '1001010',

.......省略

})

3.比如提交完表单,用动态key把值都赋值为空字符串(此时报错出现了)

for (const key in changeRes) {

changeRes[key] = ''  // 报错: 元素隐式具有 "any" 类型,因为类型为 "string" 的表达式不能用于索引类型

}

4.至于在TS中如何解决这个报错,

changeRes[key as keyof ICityData] = ''    这样写就可以解决了

5.上面演示的情况是 ICityData 里面属性的值的类型都是 string类型,这样写就ok了,但是还有的情况是他里面还有比如 count: number ,isSelected: boolean 这样的类型,或者是一个对象遍历出来值动态循环给另一个对象赋值,总之就是值得类型不再是唯一一种了,此时再按上面写 他会报错,他左侧等着被赋值的类型变成了never

不能将类型“string | number | boolean ”分配给类型“never”。

// 比如多了一个别的类型
interface ICityData {

  provinceCode: string

  count: number

}
 for (const key in changeRes) {
      const tkey = key as keyof ICityData 
      if (tkey === 'count') {
        changeRes[tkey] = 0
      } else {
        changeRes[tkey] = ''
      }
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 变量 可以说python只有名字没有变量,不需要定义类型,你赋值啥他就啥类型(所以定义变量时就得赋值,有int、f...
    dawsonenjoy阅读 3,919评论 0 0
  • TypeScript 2.2 引入了被称为 object 类型的新类型,它用于表示非原始类型。在 JavaScri...
    PHP9年架构师阅读 7,946评论 0 0
  • 1、概述 1、简介 JavaScript 语言的每一个值,都属于某一种数据类型. JavaScript 的数据类型...
    Qingelin阅读 3,674评论 0 0
  • 问题情景# 订单页面需要展示不同订单的游客信息,订单信息有一个公共数据实体,而游客有不同的两个不同的数据实体,于是...
    转交遇见陈绮贞阅读 2,515评论 0 0
  • 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值。但是,计算机能处理的远不止数值...
    wit92阅读 1,326评论 0 0