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
相关产品推荐
相关产品推荐

