Ну, это странный сценарий, и его трудно охватить.
Я не совсем понимаю, почему вы бы деструктурировали объект data
и выполнили бы клавишу user
со значением data.user
.
Ошибка компиляции (или вводящий в заблуждение тип) находится в значении по умолчанию. Поскольку присвоение не применяется к строго типизированному объекту, предоставляя значение по умолчанию, которое является пустым объектом {}
, все переменные d должны иметь значение по умолчанию (даже явное undefined
, в зависимости от tsconfig.json
).
Полагаю, есть два подхода.
const {
user: {
username,
image,
uid
}
} = { user: data.user || {} };
Нет значения по умолчанию user
ключ. Теперь все переменные string
напечатаны.
Второй подход, допустим значение по умолчанию user
, но также предоставляем явные значения по умолчанию для переменных
const {
user: {
username = undefined,
image = 'default-image',
uid = '000-000-0'
} = {}
} = { user: data.user || {} };
Это немного избыточно и, в этом случае , username
имеет тип union string | undefined
... так что это довольно слабый тип.
В VSCode со средой Typescript, если вы наведите курсор мыши на клавишу user
, компилятор теперь понимает, что это необязательный параметр. свойство user?: IUser
типа IUser
. Вот почему мы должны предоставить значения по умолчанию.
Наконец, как я комментировал выше, я нашел этот сценарий немного странным. Вы можете просто деконструировать объект data.user
даже с пустой проверкой пустоты, обеспечивающей строго типизированную деконструкцию.
const {
username,
image,
uid
}: IUser = { ...data.user || {} };