打字稿错误与发电机
问题描述:
在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}`);
}
有人可以请大家指教...
答
在枚举属性的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在评论中提供的链接以获取更多详细信息。
[为什么使用“for ... in”与数组迭代是一个坏主意?](http://stackoverflow.com/q/500504/215552)。 –