为啥 tslint 中不允许按位运算符?

Posted

技术标签:

【中文标题】为啥 tslint 中不允许按位运算符?【英文标题】:Why are bitwise operators not allowed in tslint?为什么 tslint 中不允许按位运算符? 【发布时间】:2018-05-17 07:06:50 【问题描述】:

我们不能在模板中使用按位运算符,但是为什么 tslint 不允许在 TypeScript 代码中使用它们?

"no-bitwise": true,

【问题讨论】:

【参考方案1】:

Linter 的存在有多种原因:帮助维护一致、干净和可读的代码,捕捉开发人员错误(例如无法访问的代码或未使用的变量),并警告您可能存在的不良做法,即使它们在技术上是允许的。

如TSLint documentation中所述

按位运算符通常是拼写错误 - 例如 bool1 & bool2 而不是 bool1 && bool2。它们也可能表明代码过于聪明,会降低可维护性。

由于这些类型的拼写错误比位运算符的实际有效使用更为常见,TSLint默认禁止它们

除非您正在开发的应用程序的唯一目的是进行按位运算,否则最好保持启用规则(因为就像其他任何人一样容易犯这种错字) .但是,如果您确实有一个有效的情况可以按位使用,那么disable the rule temporarily 只是 用于该行或代码块,如下所示:

/* tslint:disable:no-bitwise */
const redColor = (decimalColor & 0xff0000) >> 16;
const greenColor = (decimalColor & 0x00ff00) >> 8;
const blueColor = decimalColor & 0x0000ff;
/* tslint:enable:no-bitwise */

别忘了重新启用规则!

或单行:

// tslint:disable-next-line:no-bitwise
const redColor = (decimalColor & 0xff0000) >> 16;

如果使用 ESLint,请参阅 documentation here

【讨论】:

很遗憾,没有一条 lint 规则说“您忘记重新启用您禁用的规则”。 @teedyay 哈哈,是的,看起来像个笑话。无论如何,你总是可以golint【参考方案2】:

位运算符通常是拼写错误 - 例如 bool1 & bool2 而不是 bool1 && bool2。它们也可能表明代码过于聪明,会降低可维护性。

https://palantir.github.io/tslint/rules/no-bitwise/

【讨论】:

@Mick haha​​ha 这让我笑了两分钟! 备用方案呢? ||| 更好,因为它不会依赖于像 0 这样的值。【参考方案3】:

如果您查看 Docs

“位运算符在 javascript 程序中非常少见”

无论如何,您都可以禁用按位选项来停止警告。

【讨论】:

这是 JSHint,不是 Angular 的解释。而且即使是稀有的东西,也不应该被禁止? Angular 与上面没有任何关系,它的 Typescript ,也可以在这里查看github.com/palantir/tslint/issues/18

以上是关于为啥 tslint 中不允许按位运算符?的主要内容,如果未能解决你的问题,请参考以下文章

当按位运算符做同样的事情时,为啥要使用逻辑运算符?

Dan Bernstein 的 Djb2 哈希函数:当我们只能乘以 33 时,为啥还要使用按位运算符?

为啥这个逻辑/按位运算返回 1?

按位运算的意外结果为啥 (1 | 1 & 2) 给出 1 而不是 2?

为啥在java中不允许没有括号的赋值和布尔运算符

为啥 AVX2 和 SSE2 按位 OR 运算符并不比简单的快?操作员?