2017-05-18 75 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在評論中提供的鏈接以獲取更多詳細信息。