Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript:number |数组<;数量>;can';不做数组操作_Typescript - Fatal编程技术网

Typescript:number |数组<;数量>;can';不做数组操作

Typescript:number |数组<;数量>;can';不做数组操作,typescript,Typescript,当有这样的类型时,即使在执行数组操作之前检查tyepof,我也无法执行数组操作: 类型演示={ [国家名称:字符串]:数字|数组 } 我被迫使用作为数字,并根据需要创建尽可能多的时间变量。 这是一个简化的示例,但可能会变得非常丑陋: var国家/地区:演示={ “西班牙”:0, "意大利":20,, “德国”:[0,1,2] }; 变量总数:数值=0; 用于(国家/地区中的var国家/地区){ 如果(国家类型[country]==“number”){/您可以这样做: type Demo =

当有这样的类型时,即使在执行数组操作之前检查
tyepof
,我也无法执行数组操作:

类型演示={
[国家名称:字符串]:数字|数组
}
我被迫使用
作为数字
,并根据需要创建尽可能多的时间变量。 这是一个简化的示例,但可能会变得非常丑陋:

var国家/地区:演示={
“西班牙”:0,
"意大利":20,,
“德国”:[0,1,2]
};
变量总数:数值=0;
用于(国家/地区中的var国家/地区){

如果(国家类型[country]==“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]
        }
    }
}
类型演示={
[国家名称:字符串]:数字|数组
}
var国家/地区:演示={
“西班牙”:0,
"意大利":20,,
“德国”:[0,1,2]
};
变量总数:数值=0;
用于(国家/地区中的var国家/地区){
设c=国家[国家]//编号|编号[]
如果(c的类型==“编号”){
总数+=c//个数
}
否则{
//c编号[]

for(设i=0;如果您只是重复使用相同的索引,它不喜欢它。在这种情况下,它不会保持类型缩小。您需要一个变量,它可以像
const c=countries[country]一样简单
在循环开始时,只需使用一个变量,而不是一次又一次地编制索引。可能更简单的方法是直接循环对象的值:
for(var country of object.values(countries))
(请注意)另外,建议不要使用
var
。在TS中不需要这样做-它将编译
const
let
到适当的形式。请参阅的答案;这里建议的解决方法是将值保存到一个新变量,控制流分析现在可以工作,如(啊,我看到@VLAZ刚刚说过这句话)@jcalz只是为了完整性。但这是一样的,只是在循环中保存了一行声明变量。是的,意外地忽略了。所以,如果我们有7个变量这样做,我们必须创建7个时间变量?
用户。爱好[type][availableDays]
用户。任务[type][availableDays]
用户。汽车[type][availableDays]
…我看到的另一个问题是,如果我的目的是修改对象中的值(通过引用),那么在将其分配给变量时,这无法完成。