Javascript 和 Typescript:使用 for..of 对对象进行迭代

Posted

技术标签:

【中文标题】Javascript 和 Typescript:使用 for..of 对对象进行迭代【英文标题】:Javascript and Typescript: iteration over object with for..of 【发布时间】:2018-03-19 03:30:18 【问题描述】:

来自ES6 iteration over object values,我采用了一种迭代对象值的方法。这是我的实现:

function* entries (obj): IterableIterator<any> 
    for (const key of Object.keys(obj)) 
        const value = obj[key];
        yield [
            key,
            value,
        ];
    

那我想在render()React Component的方法中使用:

render () 
    const that = this;
    const newVar = (() => 
        const elements = [];
        for (const [key, value] of entries(that.filters)) 
            elements.push(<h2>JSON.stringify(key) JSON.stringify(value)</h2>);
        
        return elements;

    )();
    return (
        <section>
            newVar
        </section>
    );

但如果我在 Chrome 开发者控制台中使用 .map 文件调试此代码,newVar 是一个空数组。如果我在entries 生成器中提醒obj,我得到了正确的对象。我错过了一些非常简单的东西吗?预先感谢您的每一个答案。我使用带有es5 选项的Typescript,我读到它支持生成器:Generators and Iteration for ES5/ES3。

【问题讨论】:

顺便说一句,您既不需要that,也不需要IIFE。 您确定要传递您链接的 TypeScript 文档中提到的 --downlevelIteration 标志吗? @Bergi 我不是 :) 非常感谢,在你回答我之前我浪费了几个小时,请将你的帖子写成新的答案,我会接受的。我知道这很愚蠢:) 【参考方案1】:

我使用带有 es5 选项的 Typescript,我读到它支持生成器:Generators and Iteration for ES5/ES3。

它还说您需要为此使用--downlevelIteration 标志。否则,它仍会将for … of-loops 转换为数组迭代,这会在没有.length 属性的生成器实例等可迭代对象上失败。

【讨论】:

以上是关于Javascript 和 Typescript:使用 for..of 对对象进行迭代的主要内容,如果未能解决你的问题,请参考以下文章

TypeScript 和 JavaScript 的区别

利用TypeScript构建优雅的React Native项目

TypeScript教程

用于 TypeScript 的 IOC

帮你培养类型思维TypeScript

TypeScript 素描 - 函数