как избежать вложенного машинописного текста, если операторы используют let x: type | undefined = переменная - PullRequest
0 голосов
/ 26 апреля 2018

Есть ли лучший способ обработать проверку типа | type2, когда переменная определена как тип | типа2? Например, у меня есть небольшой фрагмент кода:

    if (e) {
        let targetElement: Element | undefined = e.toElement;
        if (targetElement) {
            let medicineCategory: string | null = targetElement.textContent;
            if (medicineCategory) {
                $('#selected-medicine-info').text(medicineCategory);
            }
        }
    }

Помещать в код кучу проверок для! Undefined и! Null кажется действительно не элегантным, особенно если это вложено более глубоко.

Я остановился на этом, что немного лучше, и я могу легко сказать, что значение textContent было нулевым:

    let targetElement: Element | undefined = e.toElement;
    if (targetElement) {
        let medicineCategory: string | null = (targetElement.textContent !== null) ? targetElement.textContent : "null";
        $('#selected-medicine-info').text(medicineCategory);
    }

1 Ответ

0 голосов
/ 27 апреля 2018

Вы можете использовать LoDash. _.get автоматически выполнит обработку ошибок. Если e равно null / undefined или путь не существует, он просто вернет значение по умолчанию. Если вы не укажете значение по умолчанию, он вернет undefined.

// _.get takes an `object`, `path`, and `default`. Typescript will infer
// that the type is `string`, because the default is an empty string 
// (thanks Lodash)

const medicineCategory = _.get(e, ['toElement', 'textContext'], '');

if (medicineCategory) 
   $('#selected-medicine-info').text(medicineCategory);

Подробнее здесь: https://lodash.com/docs/4.17.10#get

Существует причина, по которой LoDash больше всего зависит от библиотеки npm. (https://www.npmjs.com/ см. Внизу страницы).

...