打字稿:数字 | Array<number> 不能做数组操作

时间:2021-05-27 16:33:59

标签: typescript

当有这样的类型时,即使在执行数组操作之前检查 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?
        }
    }
}

处理这种我们希望基于代码中的条件同时应用数字操作和数组操作的对象的方法是什么?

1 个答案:

答案 0 :(得分:1)

你可以这样做:

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]
        }
    }
}

TS Playground