2017-05-18 78 views
0

在VSCode尝试当这个打字稿遇到错误:打字稿错误与发电机

enum Desg { 
    Consultant, 
    Engineer 
}; 

interface Employee { 
    Name: string; 
    Role: Desg; 
} 

let names: string[] = ['Sunit', 'Duke']; 
//Complains about Name property missing 
function* getEmp(): Employee { 
    for (let n in names) { 
     if (n === 0) //Complains here about n being string 
      yield { Name: names[n], Role: Desg.Consultant } 
     else 
      yield { Name: names[n], Role: Desg.Engineer } 
    } 
} 

for (let n of getEmp()) { 
    console.log(`${n.Name} is ${n.Role}`); 
} 

有人可以请大家指教...

+0

[为什么使用“for ... in”与数组迭代是一个坏主意?](http://stackoverflow.com/q/500504/215552)。 –

回答

0

在枚举属性的for...in循环迭代的(键)一个对象,它们是字符串。在你的情况下,该对象是一个数组,所以键是数组索引作为字符串。

您可以通过执行证实了这一点:

for (let n in names) { 
    console.log(n); 
    console.log(typeof n); 
} 

您将看到:

0 
string 
1 
string 

所以打字稿不能串n比较数0

请注意,如果你不喜欢的东西:

names["key"] = "value"; 

然后重复同样的方式,你会看到:

0 
string 
1 
string 
key 
string 

这开始证明为什么人建议不要使用for...in迭代数组索引。查看@Mike McCaughan在评论中提供的链接以获取更多详细信息。