TSLint не распознает правильные побитовые операторы

К сожалению, этот допустимый код считается небрежным по умолчанию 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 и правильное использование программирования диктуют правильное использование | оператор. В тех случаях, когда вы собираетесь использовать побитовое, называть это ошибкой просто глупо.

Я не знаю, как отключить эту проблему с линтингом в каждом конкретном случае, но оставьте глобальную настройку без изменений.


person Kim Gentes    schedule 13.06.2018    source источник
comment
Мое наблюдение заключается в том, что правила в TSLint не используют информацию о типе, если в этом нет крайней необходимости. Это касается no-bitwise. правило. Это правило можно было бы применить по-другому, если бы требовалась информация о типе, но это повлекло бы за собой снижение производительности, а также сделало бы файл tsconfig.json обязательным.   -  person cartant    schedule 14.06.2018


Ответы (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;
}
person Kim Gentes    schedule 13.06.2018
comment
большое спасибо. Я пытался использовать 【@ts-ignore】, но это не сработало. Но с помощью 【tslint:disable-next-line】 это может подействовать. - person Lancer.Yan; 21.08.2020