TypeScript поддерживает идею разбиения структуры объекта. То, что обычно требует написания нескольких строк кода, можно сделать одной строкой. Есть две основные формы деструктуризации: объектная и произвольная. В этой статье основное внимание уделяется деструктуризации объектов.
Начнем с интерфейса:
export interface Person { age: number; }
Обычно мы просто передаем весь объект в функцию для управления некоторыми данными.
incrementAge( person: Person){ person.age = person.age + 1; }
Теперь представьте, что ваш класс Person был «очень большим и сложным», и вы просто хотели изменить одно свойство объекта.
export interface Person { name: string; street: string; car: boolean; age: number; }
Мы хотим создать новую функцию для увеличения возраста людей. Здесь нас интересуют только два свойства.
happyBirthday( {age, car} ){ }
Демонстрация
Я собираюсь сделать простую форму для нашего интерфейса.
<form #f="ngForm" (ngSubmit)="onSubmit(f)" novalidate> <label for="name">Name</label> <input name="name" ngModel required #first="ngModel"> <br> <label for="age">Age</label> <input name="age" ngModel> <br> <label for="street">Street</label> <input name="street" ngModel> <br> <label for="car">Car</label> <input name="car" ngModel> <br> <button>Submit</button> </form> <p>Form value: {{ f.value | json }}</p> <p>After submitting: {{item | json}}</p>
Когда нажимается кнопка «Отправить», я хочу вызвать функцию для увеличения возраста человека без передачи всего объекта.
onSubmit(f: NgForm) { //note you can see the entire object console.log(f.value); this.happyBirthday(f.value); } happyBirthday( { age, car } ){ console.log(age + '' + car); this.item.age = Number(age) + 1; this.item.car = "red"; }
После отправки:
Вот репозиторий git.
Чтобы запустить в режиме разработки, откройте терминал и запустите:
ng serve — open
Чтобы построить для производства с AOT и treehaking:
ng build --prod --build-optimizer