我在VSCode中试用这个TypeScript时遇到错误:
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 :(得分:0)
for...in
循环遍历对象的可枚举属性(键),这些属性是字符串。在您的情况下,对象是一个数组,因此键是数组索引作为字符串。
您可以通过执行以下操作来确认:
for (let n in names) {
console.log(n);
console.log(typeof n);
}
你会看到:
0
string
1
string
因此TypeScript无法将字符串n
与数字0
进行比较。
请注意,如果你做了类似的事情:
names["key"] = "value";
然后以相同的方式迭代,你会看到:
0
string
1
string
key
string
这开始说明为什么人们建议不使用for...in
迭代数组索引。查看@Mike McCaughan在评论中提供的链接,了解更多详情。