生成器的TypeScript错误

时间:2017-05-18 20:44:05

标签: typescript typescript-generics

我在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}`);
}   

有人可以开导......

1 个答案:

答案 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在评论中提供的链接,了解更多详情。