【问题标题】:for-in statementfor-in 语句
【发布时间】:2012-10-18 08:51:58
【问题描述】:

TypeScript 文档没有提到像 forfor-in 这样的循环。从使用语言来看,for 循环似乎只支持 anystring 变量。

为什么会做出这个决定?

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

【问题讨论】:

    标签: typescript


    【解决方案1】:

    在 Typescript 1.5 及更高版本中,您可以使用 for..of 而不是 for..in

    var numbers = [1, 2, 3];
    
    for (var number of numbers) {
        console.log(number);
    }
    

    【讨论】:

    • for...in 迭代集合中对象的键,而 for...of 是迭代对象本身的正确方法
    • for..of 没有给你一个迭代器。因此,如果您正在做类似比较数组中的连续值之类的事情,for..of 不是正确的解决方案,for..in 是。 TypeScript 错误地人为地限制了这些结构的使用方式。
    【解决方案2】:

    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" 
    

    【讨论】:

    • OK...但是字符串不如“此特定对象的键”精确。那么在使用 for in 循环进行迭代时,对象的一个​​类型键是如何实现的呢?
    【解决方案3】:

    for-in 语句确实用于枚举对象属性,这就是它在 TypeScript 中的实现方式。还有一些issues with using it on arrays

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

    【讨论】:

      【解决方案4】:

      edit 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);
      }
      

      "

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

      ma​​pforEach 经常帮助我,这是由于 typescripts 对函数定义的增强更容易接近,例如:

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

      我对 TypeScript 的愿望清单;

      1. 通用集合
      2. 迭代器(IEnumerable、IEnumerator 接口最好)

      【讨论】:

        猜你喜欢
        • 2011-11-20
        • 1970-01-01
        • 1970-01-01
        • 2019-07-16
        • 1970-01-01
        • 2015-05-30
        • 2012-08-12
        相关资源
        最近更新 更多