tslint: prefer-for-of 期望一个“for-of”循环而不是一个“for”循环

Posted

技术标签:

【中文标题】tslint: prefer-for-of 期望一个“for-of”循环而不是一个“for”循环【英文标题】:tslint: prefer-for-of Expected a 'for-of' loop instead of a 'for' loop 【发布时间】:2018-11-21 10:55:28 【问题描述】:

我收到这个 tslint 错误:

prefer-for-of  Expected a 'for-of' loop instead of a 'for' loop with this simple iteration

代码:

function collectItems(options) 
    const selected = [];
    for (let i = 0; i < options.length; i++) 
      const each = options[i];
      if (each.selected) 
        selected.push(each.label);
      
    
    return selected;
  

谁能帮我理解和解决这个错误? 我知道在这个问题上有一个answer,但这对我的情况没有帮助。

【问题讨论】:

为什么其他问题没有帮助? 【参考方案1】:

for-of 更简洁,不需要手动迭代。为了可读性,linter 建议您改写这样的内容:

function collectItems(options) 
  const selected = [];
  for (const each of options) 
    if (each.selected) 
      selected.push(each.label);
    
  
  return selected;

但在这种情况下使用reduce 会更好:

const collectItems = options => options.reduce((selectedLabels,  selected, label ) => 
  if (selected) selectedLabels.push(label)
  return selectedLabels;
, []);

(您也可以使用filter 后跟map,但这需要迭代数组两次而不是一次)

【讨论】:

【参考方案2】:

您可以使用 for-of 迭代数组的元素以避免 ts-lint 警告:

function collectItems(options) 
    const selected = [];
    for (const each of options) 
        if (each.selected) 
            selected.push(each.label);
        
    
    return selected;

或者你可以使用一个单行来过滤数组:

const selected = options.filter(e=> e.selected).map(e=> e.label);

【讨论】:

以上是关于tslint: prefer-for-of 期望一个“for-of”循环而不是一个“for”循环的主要内容,如果未能解决你的问题,请参考以下文章

预期 'var' 有一个 typedef

TypeScript TSLint(TypeScript代码检查工具)

什么是 tslint 黑名单,为什么 angular-cli 默认 rxjs 在 tslint.json 的列表中?

gulp-tslint @7.0.1 无法读取未定义的属性“findConfiguration”

是否有 TSLint 规则来检查单个等于?

是否可以在 tslint.json 中禁用 TSLint?