for..in循环类型'string'上不存在属性

时间:2018-07-05 16:56:02

标签: typescript

此代码未编译(TypeScript v 2.9):

   class Foo {
      constructor(public key: string, public value: string) {
      }
    }

    const arr = new Array<Foo>();

    for (let foo in arr) {
          console.log(foo.key, foo.value)
    }

这是TypeScipt游乐场上的相同代码: https://www.typescriptlang.org/play/index.html#src=class%20Foo%20%7B%0D%0A%20%20constructor(public%20key%3A%20string%2C%20public%20value%3A%20string)%20%7B%0D%0A%20%20%7D%0D%0A%7D%0D%0A%0D%0Aconst%20arr%20%3D%20new%20Array%3CFoo%3E()%3B%0D%0A%0D%0Afor%20(let%20foo%20in%20arr)%20%7B%0D%0A%20%20%20%20%20%20console.log(foo.key%2C%20foo.value)%0D%0A%7D

原因是:

enter image description here

为什么TypeScript认为变量是字符串的类型以及如何使用for..in循环来解决它?

2 个答案:

答案 0 :(得分:5)

for-in将迭代对象的键,使用for-of

来迭代数组。
class Foo {
  constructor(public key: string, public value: string) {
  }
}

const arr = new Array<Foo>();

for (let foo of arr) {
      console.log(foo.key, foo.value)
}

答案 1 :(得分:1)

尝试使用for (let foo of arr) {代替for (let foo in arr) {