问题描述
当有这样的类型时,即使在执行数组操作之前检查 tyepof
时,我也无法设法执行它们:
type Demo = {
[countryName: string]: number | Array<number>
}
我不得不使用 as number
并根据需要创建尽可能多的时间变量。
这是一个简化的示例,但它可能会变得非常丑陋:
Playground reproduction
var countries:Demo = {
'spain': 0,'italy': 20,'germany': [0,1,2]
};
var total: number = 0;
for (var country in countries) {
if(typeof countries[country] === "number"){ //<--- useless?
total += countries[country] as number; // forced to use it
}
else{
var tmpCountries = countries[country] as Array<number>; //<--- forced tmp variable
for(let i = 0; i<tmpCountries.length; i++){
total += countries[country] as number; //<-- again as number?
}
}
}
处理这种我们希望基于代码中的条件同时应用数字操作和数组操作的对象的方法是什么?
解决方法
你可以这样做:
type Demo = {
[countryName: string]: number | Array<number>
}
var countries:Demo = {
'spain': 0,'italy': 20,'germany': [0,1,2]
};
var total: number = 0;
for (var country in countries) {
let c = countries[country] // number | number[]
if(typeof c === "number"){
total +=c //number
}
else{
// c number[]
for(let i = 0; i<c.length; i++){
total += c[i]
}
}
}