微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

TS Playground

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。