Как избежать деструкции неопределенных значений в JavaScript?

#javascript #typescript #destructuring

Вопрос:

Я получаю ответ registryReportSettings от сервера:

 this.getRegistrySettings(registry.Id).subscribe((registryReportSettings: { extended: ReportPropertiesRequest }) => {
  const { objectProperties, reportProperties, textProperties } = registryReportSettings?.extended;
}
 

Если это null так, я получаю сообщение об ошибке:

 TypeError: Cannot destructure property 'objectProperties' of '(intermediate value)(intermediate value)(intermediate value)' as it is undefined.
 

Как это исправить с помощью TS?

Комментарии:

1. Начните с правильного объявления типа, соответствующего значениям, которые вы на самом деле получаете: { extended: ReportPropertiesRequest | null }

Ответ №1:

Ошибка означает, что вы пытаетесь деконструировать возможное undefined (поскольку вы используете необязательную цепочку)

Вы можете сделать

 const { objectProperties, reportProperties, textProperties } = registryReportSettings?.extended ?? {};
 

Таким образом, вы всегда будете деконструировать объект

Комментарии:

1. Рассмотрите возможность использования нулевого оператора объединения ?? вместо || . В этом контексте это не имело бы большого значения, но как только вы будете иметь дело с примитивными значениями, это произойдет.

2. Вы правы, я обновил свой ответ