#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. Вы правы, я обновил свой ответ