Как использовать плоские вложенные троицы с ESLint? - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть такой код:

let upgrade;
if (device.firmwareV !== latestFirmware.version) {
    upgrade = "Firmware is up to date.";
} else if (!firmUpTool) {
    upgrade = "Cannot upgrade the firmware through this connection.";
} else if (latestFirmware.type !== device.type) {
    upgrade = "Cannot upgrade firmware of this device.";
} else {
    upgrade = upgradeControl(firmUpTool);
}

Но я бы предпочел использовать троичный оператор (условие ? значение1 : значение2), поскольку он позволяет мне заменить let на const (и, на мой взгляд, выглядит более аккуратно, хотя я ценю это мнение различаться):

const upgrade =
    device.firmwareV !== latestFirmware.version ?
        "Firmware is up to date."
    : !firmUpTool ?
        "Cannot upgrade the firmware through this connection."
    : latestFirmware.type !== device.type ?
        "Cannot upgrade firmware of this device."
    : upgradeControl(firmUpTool);

Но ESLint выдает 5 ошибок, как Expected indentation of 12 spaces but found 8.. Если я следую рекомендациям, я должен сделать отступ в коде, хотя я дал ему правило отступа:

indent: [2, 4, {flatTernaryExpressions: true}]

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

Есть ли лучший способ размещения плоских вложенных тернаров или есть какое-то другое правило ESLint, которое я должен использовать здесь?

1 Ответ

0 голосов
/ 01 ноября 2018

Вы можете использовать функцию, которая проверяет детали и возвращает их раньше, если условие true.

Преимущество - удобочитаемость и удобство обслуживания.

Недостающие элементы else покрываются возможным более ранним выходом из функции.

function checkUpgrade() {
    if (device.firmwareV !== latestFirmware.version) {
        return "Firmware is up to date.";
    }
    if (!firmUpTool) {
        return "Cannot upgrade the firmware through this connection.";
    }
    if (latestFirmware.type !== device.type) {
        return "Cannot upgrade firmware of this device.";
    }
    return upgradeControl(firmUpTool);
}

const upgrade = checkUpgrade();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...