【问题标题】:TSLint not recognizing proper bitwise operatorsTSLint 无法识别正确的按位运算符
【发布时间】:2018-06-13 23:08:03
【问题描述】:

遗憾的是,此有效代码被 TSLint 的默认设置视为疏忽:

export const NO_FLAG: number = 0x0000;
export const DESTROY_FLAG: number = 0x0001;
export const NULL_FLAG: number = 0x0100;
export const START_FLAG: number = 0x0200;
export const STOP_FLAG: number = 0x0400;

export function getPackedFlags(destroy: boolean,
                               nullThing: boolean,
                               start: boolean,
                               stop: boolean): number {
    const bitFlags: number = ((destroy) ? DESTROY_FLAG: NO_FLAG) |
                            ((nullThing) ? NULL_FLAG: NO_FLAG) |
                            ((start) ? START_FLAG: NO_FLAG) |
                            ((stop) ? STOP_FLAG: NO_FLAG);
    return bitFlags;
}

执行上述操作会产生这种输出:

tslint --project ./tsconfig.json --format verbose --force

ERROR: (no-bitwise) C:/git/my-stuff/src/index.ts[393, 34]: Forbidden bitwise operation
ERROR: (no-bitwise) C:/git/my-stuff/src/index.ts[393, 34]: Forbidden bitwise operation
ERROR: (no-bitwise) C:/git/my-stuff/src/index.ts[393, 34]: Forbidden bitwise operation

TSLint 的作者有一个将其设置为默认错误的策略。但是,Typescript 编译器和正确的编程用法表明这是正确使用 |操作员。在您打算按位使用的情况下,将其称为错误是很愚蠢的。

我不知道如何根据具体情况关闭此 linting 问题,但请保持全局设置不变。

【问题讨论】:

  • 我的观察是 TSLint 中的规则不使用类型信息,除非绝对必要。 no-bitwise 规则就是这种情况。如果需要类型信息,则可以以不同方式执行该规则,但这会带来性能成本,并且还会强制使用 tsconfig.json 文件。

标签: typescript lint tslint bitwise-or


【解决方案1】:

幸运的是,您可以在单行基础上禁用此功能,如下所示:

export function getPackedFlags(destroy: boolean,
                               nullThing: boolean,
                               start: boolean,
                               stop: boolean): number {
    // tslint:disable-next-line:no-bitwise
    const bitFlags: number = ((destroy) ? DESTROY_FLAG: NO_FLAG) |
                            ((nullThing) ? NULL_FLAG: NO_FLAG) |
                            ((start) ? START_FLAG: NO_FLAG) |
                            ((stop) ? STOP_FLAG: NO_FLAG);
    return bitFlags;
}

【讨论】:

  • 非常感谢。我尝试使用【@ts-ignore】,但没有成功。但是使用你的【tslint:disable-next-line】,就可以生效了。
猜你喜欢
  • 2020-12-14
  • 1970-01-01
  • 1970-01-01
  • 2018-05-17
  • 1970-01-01
  • 2017-04-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多