对于以下代码,
// Print indexes
var randArray = [5, 6, 7, 8];
for(var val in randArray){ // val is type inferred to String type
document.write(val + "<br>");
}
// Print values
for(var val of randArray){ // Line 95
document.write(val + "<br>");
}
以下是错误,
tstut.ts(95,9): error TS2403: Subsequent variable declarations must have the same type. Variable 'val' must be of type 'string', but here has type 'number'.
代码下方
// Print indexes
var randArray = [5, 6, 7, 8];
for(var index in randArray){
document.write(index + "<br>");
}
// Print values
for(var val of randArray){
document.write(val + "<br>");
}
解决了这个问题。
在问题情况下,为什么val
类型不能number
类型?
答案 0 :(得分:3)
对代码的简单修复就是将var
更改为let
:
// Print indexes
var randArray = [5, 6, 7, 8];
for(let val in randArray){
console.log(val);
}
// Print values
for(let val of randArray){
console.log(val);
}
您的问题是var
关键字对变量的范围的根源。 (参见manual。)var
声明'范围是封闭函数,因此第二个for(var val...)
实际上指向同一个变量,而在TypeScript中,它们只有一个定义的类型。 let
将变量范围扩展到封闭块或for
,这意味着两个变量可以具有相同的名称,但仍然是单独的变量。
答案 1 :(得分:0)
在JavaScript中使用“for..in”会公开数组的键/索引,只是'因为它不会迭代数组项,而是迭代数组中的键/索引阵列。例如,
var randArray = [5, 6, 7, 8];
for(let val in randArray){
document.write(val + "<br>");
}
在上面的代码中,无论“randArray”数组包含什么项,它总是会抛出索引。
“for..of”来救援。这是TypeScript(和ES6)中存在“for..of”的原因之一。带有“for..of”循环的上述代码将迭代数组中的项。
此外,将“var”替换为“let”'coz“let”关键字将变量绑定到本地范围,而不像JavaScript中的“var”关键字。