Статья о деструктуризации ЭС, которая также реализована в машинописи.Однако Typescript выполнит дополнительные проверки.Одна из этих проверок заключается в том, что вы не можете удалить структуру из типа, который не объявляет свойство.
Итак, это будет ошибка:
let foo = {
bar: "Can you perform a Quirkafleeg?"
}
let { qaz = "I'm feeling manic!" } = foo; //err
Хотя это будет работать:
let foo = {
bar: "Can you perform a Quirkafleeg?",
qaz: undefined
}
let { qaz = "I'm feeling manic!" } = foo; //ok qaz is "I'm feeling manic!" because of the default
Или вы можете указать тип явно:
let foo: { bar: string, qaz?: string} = {
bar: "Can you perform a Quirkafleeg?",
}
let { qaz = "I'm feeling manic!" } = foo; //ok qaz is "I'm feeling manic!" because of the default
Другая часть - вы можете деструктурировать свойство к переменной с другим именем, поэтому ниже мы берем bar
начиная с foo
и вставляя fizz
let foo = {
bar: "Can you perform a Quirkafleeg?",
qaz: undefined
}
let { fizz: bar = "Eugene was my friend." } = foo; // basically same as let fizz = foo.bar || "Eugene was my friend."
console.log(fizz); // "Can you perform a Quirkafleeg?"
Но применяется то же ограничение для машинописи, что bar
в этом случае должно быть определено для foo
.
Это обычнодополнительный уровень проверки типов машинописи делает, вы не можете получить доступ к свойствам, о которых не знает тип сценарий, либо через деструктуризацию, либо через прямой доступ с .
или []
Последняя часть, доступ к которой console.log(fizz.faz);
будетникогда не будет действительным, fizz
не является исходным объектом, это строка, которая была в foo.bar
, поэтому она не будет иметь свойства faz
или bar
.Я полагаю, что это неправильное понимание исходного блога с вашей стороны, я не нашел таких претензий в блоге.