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]
…我看到的另一个问题是,如果我的目的是修改对象中的值(通过引用),那么在将其分配给变量时,这无法完成。