TypeScript. Деструктурирующее присваивание

В спецификации ECMAScript 2015 впервые появилось определение "Деструктурирующее присваивание". Когда-то эта фича меня порадовала в Python. Теперь и в JavaScript (TypeScript) можно делать такие прикольные штуки:

let a, b, rest;
[a, b, ...rest] = [1, 2, 3, 4, 5];
console.log(a); // 1
console.log(b); // 2
console.log(rest); // [3, 4, 5]

[a, b] = [b, a] // Красота!
console.log(a); // 2
console.log(b); // 1

Деструктурируем массивы

Простейшая форма - разбор массивов:

let input = [1, 2];
let [first, second] = input;
console.log(first); // 1
console.log(second); // 2

Работает с существующими переменными:

// меняем значения переменных местами
[first, second] = [second, first];

И с параметрами функции:

 function f([first, second]: [number, number]) {
     console.log(first);
     console.log(second);
 }
 f(input);

В отдельную переменную можно запихнуть остающиеся значения, используя перед ее именем многоточие:

let [first, ...rest] = [1, 2, 3, 4];
console.log(first); // 1
console.log(rest); // [ 2, 3, 4 ]

Некоторые значения можно пропускать:

let [first] = [1, 2, 3, 4];
console.log(first); // 1
let [, second, , fourth] = [1, 2, 3, 4];

Деструктурируем объекты

Разбор объектов:

let obj = {
    a: 'foo',
    b: 12,
    c: 'bar'
}
let {a, b} = obj;

Создаются переменные a и b со значениями 'foo' и 12 соответственно.

Можно переименовывать свойства:

let {a: newNameA, b: newNameB} = o;

Равносильно этому:

let newNameA = o.a;
let newNameB = o.b;

Чутка задом наперед конечно, но что есть, то есть.

Можно указывать значения по умолчанию:

let {a, b = 10} = obj;

Павел Прудников

Постигающий дзен фулстэк вэб буддизма

Минск, Беларусь

Подписаться на Блог MEAN stack разработчика

Получайте свежие записи прямо на ваш почтовый ящик.

Или подпишитесь на RSS с Feedly!

Комментарии

comments powered by Disqus