Javascript 在循环中通过obj['key']时抛出类型脚本警告

Javascript 在循环中通过obj['key']时抛出类型脚本警告,javascript,typescript,Javascript,Typescript,在访问循环中对象的属性时,我经常遇到从TS获取警告的问题。我知道原因,但不知道如何解决 const errs = { 'a': {}, 'b': {}, 'c': {}, 'd': {} } const errsInGroup = { 'g1': ['cn', 'z', 'a'], 'g2': ['ee','sf'] } const oneErr = errsInGroup['g1'].some(val => errs[v

在访问循环中对象的属性时,我经常遇到从TS获取警告的问题。我知道原因,但不知道如何解决

const errs = {
    'a': {},
    'b': {},
    'c': {},
    'd': {}
  }

  const errsInGroup = {
    'g1': ['cn', 'z', 'a'],
    'g2': ['ee','sf']
  }

  const oneErr = errsInGroup['g1'].some(val => errs[val]) //typescript error

  console.log(oneErr) //true

您正在使用的对象:errs没有定义类型,该类型将在该对象内使用的键的类型默认为任意

因此,当您使用.someval时,val的类型为string,当它在errs[val]中引用时,val作为string传递,但errs已将键的类型默认为any。因此,类型脚本错误

要解决这个问题,您需要养成显式定义类型的习惯

const errs: any = {
    'a': {},
    'b': {},
    'c': {},
    'd': {}
}

现在errs可以接受任何类型的键,包括字符串。

我可以强制执行errs吗说errs来自一个我无法控制的包。当然也可以。const localErrors:any=errs;然后在.some函数中用localErrors[val]替换errs[val]。这是脏的,但至少它起作用了,除了需要声明一个临时变量之外,无法直接强制转换它?如果没有更多详细信息,我想不出这一点。如果你有权访问某个包,那么你最好在那里设置它。但是,除非对象具有定义的类型/接口,否则我不确定在导入时是否可以。