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;