81

TypeScript 文档没有提到像foror之类的循环for-in。从使用语言来看,循环中似乎只支持anyorstring变量。for

为什么做出这个决定?

为什么不使用类型信息并拥有强类型迭代变量?

4

4 回答 4

137

In Typescript 1.5 and later, you can use for..of as opposed to for..in

var numbers = [1, 2, 3];

for (var number of numbers) {
    console.log(number);
}
于 2015-12-09T14:47:07.957 回答
72

TypeScript 并没有给你一把枪来射你自己的脚。

迭代器变量是一个字符串,因为它是一个字符串,句号。观察:

var obj = {};
obj['0'] = 'quote zero quote';
obj[0.0] = 'zero point zero';
obj['[object Object]'] = 'literal string "[object Object]"';
obj[<any>obj] = 'this obj'
obj[<any>undefined] = 'undefined';
obj[<any>"undefined"] = 'the literal string "undefined"';

for(var key in obj) {
    console.log('Type: ' + typeof key);
    console.log(key + ' => ' + obj[key]);
}

现在有多少个键/值对obj?6、多还是少?不,3,所有的键都是字符串:

Type: string
0 => zero point zero
Type: string
[object Object] => this obj; 
Type: string
undefined => the literal string "undefined" 
于 2012-10-19T21:03:29.587 回答
32

for-in 语句实际上是用来枚举对象属性的,这就是它在 TypeScript 中的实现方式。在数组上使用它存在一些问题。

我不能代表 TypeScript 团队发言,但我相信这就是使用该语言实现的原因。

于 2012-10-18T09:11:33.310 回答
20

编辑 2018:这是过时的,js 和 typescript 现在有 for..of 循环。
http://www.typescriptlang.org/docs/handbook/iterators-and-generators.html


“TypeScript Revealed”一书说

“您可以使用 for 或 for..in 循环遍历数组中的项目,如下所示:

// standard for loop
for (var i = 0; i < actors.length; i++)
{
  console.log(actors[i]);
}

// for..in loop
for (var actor in actors)
{
  console.log(actor);
}

"

事实证明,第二个循环没有通过循环中的演员。所以会说这是完全错误的。可悲的是,如上所述,打字稿没有触及循环。

map and forEach often help me and are due to typescripts enhancements on function definitions more approachable, lke at the very moment:

this.notes = arr.map(state => new Note(state));

My wish list to TypeScript;

  1. Generic collections
  2. Iterators (IEnumerable, IEnumerator interfaces would be best)
于 2013-04-01T20:36:35.873 回答