为啥 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 hahaha 这让我笑了两分钟! 备用方案呢?|
比 ||
更好,因为它不会依赖于像 0
这样的值。【参考方案3】:
如果您查看 Docs
“位运算符在 javascript 程序中非常少见”
无论如何,您都可以禁用按位选项来停止警告。
【讨论】:
这是 JSHint,不是 Angular 的解释。而且即使是稀有的东西,也不应该被禁止? Angular 与上面没有任何关系,它的 Typescript ,也可以在这里查看github.com/palantir/tslint/issues/18以上是关于为啥 tslint 中不允许按位运算符?的主要内容,如果未能解决你的问题,请参考以下文章
Dan Bernstein 的 Djb2 哈希函数:当我们只能乘以 33 时,为啥还要使用按位运算符?