【问题标题】:Typescript error using a variable string to locate the value in an object使用变量字符串定位对象中的值的打字稿错误
【发布时间】:2022-12-19 20:38:50
【问题描述】:

我试图用作变量来定位对象中的值,基本上是 console.log(myobj.name) 但使用变量而不是名称,例如

const myProperty = name:string
console.log(myObj[myProperty])

下面的完整详细信息(包括接口)

代码运行但我在 VSCODE 中收到以下错误。

Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'Details'.

下面是代码,最后一行是我收到打字稿错误的代码(使用严格类型)

interface Details {
  id:number,
  name:string,
  email:string
}

interface Items {
  [key: string]: Details[],
  } 

const items: Items = {
  "blackberry":[
    {
      id: 1,
      name: 'John Doe',
      email: 'john@doe.de'
    },{
      id: 2,
      name: 'Brad',
      email: 'lorem@ipsum.com',
  }
  ],
  "orange":[{
      id: 4,
      name: 'Barry',
      email: 'john@doe.de'
    }
  ]
}
const myName:string = "name" 
const myIx:string = "orange"
// console.log(items[myIx])
console.log(items[myIx][0].name)
console.log(items[myIx][0][myName]) // code runs but TS error here in VScode


【问题讨论】:

    标签: javascript typescript indexing javascript-objects


    【解决方案1】:

    Typescript 将使用 object[str] 传递的字符串视为能够处理所有类型的值。您可以将 myIx 设置为一个枚举,以强制它成为 interface 中实际存在的键之一,或者快速而肮脏的修复可以将它强制转换为任何类似这样的 (items[myIx][0] as any)[myName]

    【讨论】:

      【解决方案2】:

      您应该为 myName 使用正确的类型:

      const myName: keyof Details = "name" 
      

      这也有一个好处,当你有一个错字时,你会得到一个编译错误,例如这将失败:

      const myName: keyof Details = "Name" 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-19
        • 2017-04-18
        • 1970-01-01
        • 2019-12-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多