【问题标题】:TypeScript Error with Generator生成器的 TypeScript 错误
【发布时间】:2017-10-18 20:08:41
【问题描述】:

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

有人能指教吗...

【问题讨论】:

标签: typescript typescript-generics


【解决方案1】:

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 来迭代数组索引。查看 cmets 中 @Mike McCaughan 提供的链接了解更多详情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-20
    • 1970-01-01
    • 2017-03-05
    • 2016-08-11
    • 2017-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多