You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular 6组件while语句触发no-unused-expression规则报错原因咨询

解决TSLint的"no-unused-expression"错误问题

嘿,这个问题我之前在项目里也碰到过,咱们来理清楚原因和解决办法:

为什么会触发这个错误?

TSLint的no-unused-expression规则是用来检测那些返回值没有被使用的表达式,防止开发者写出无效或者冗余的代码。

你写的while (startYear <= currentYear) { this.years.push(startYear++); }里,startYear++是一个后置递增表达式——它会先返回startYear当前的值,然后再把变量本身加1。虽然这个操作确实改变了startYear的值,但TSLint会认为这个表达式的返回值(也就是递增前的数值)没有被利用起来,属于“未使用的表达式”,所以抛出了错误。

几种可行的解决方案

方案1:把递增操作移到循环体内

这是最直观的修改方式,把startYear++单独拿出来作为一行执行,这样就不存在“未使用的表达式”问题了:

years: number[] = [];
private _getYears() {
  let currentYear = new Date().getFullYear();
  let startYear = 2012;
  while (startYear <= currentYear) {
    this.years.push(startYear); // 先push当前年份
    startYear++; // 单独执行递增操作
  }
}

方案2:改用for循环(更推荐)

for循环本身就把初始化、条件判断和递增操作整合到了一起,结构更清晰,也完全不会触发TSLint的这个规则:

years: number[] = [];
private _getYears() {
  const currentYear = new Date().getFullYear();
  for (let startYear = 2012; startYear <= currentYear; startYear++) {
    this.years.push(startYear);
  }
}

方案3:调整表达式避免未使用返回值(不推荐,但可以了解)

如果你非要在push里写递增,可以改用前置递增的变种,但需要调整逻辑(不然会漏掉2012年),比如:

// 不推荐,逻辑不够直观
while (startYear <= currentYear) {
  this.years.push(startYear);
  ++startYear; // 前置递增和后置递增在这里效果一样,但TSLint不会报错
}

不过这种写法和方案1本质一样,不如方案1清晰。

内容的提问来源于stack exchange,提问作者Appsum Solutions

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:21:35