如何避免嵌套的打字稿 if 语句使用 let x: type |未定义 = 变量

how to avoid nested typescript if statements using let x: type | undefined = variable

有没有更好的方法来处理类型检查 | 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);
    }

您可以使用 LoDash。 _.get 会自动进行错误处理。如果 enull/undefined,或者如果路径不存在,它将只是 return 一个默认值。如果您不提供默认值,它将 return 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/ 见页面底部)。