Заметки о просмотре «Использование массивов и коллекций в Typescript 5» от Pluralsight.
Зачем использовать машинописный текст? — Более полный контроль над нашим кодом благодаря надежным типам данных.
О программе? — работа со строго типизированными массивами, наборами, кортежами и картами.
Массивы
набор элементов
[ 'cow', 'horse', 'pig', 'chicken' ] indexes: 0 or -4 = 'cow' 1 or -3 = 'horse' 2 or -2 = 'pig' 3 or -1 = 'chicken' ** careful when using negative indexes const observations: number[] = [3, 6];
— добавление
// add to end observations.push(7); // [3, 6, 7] // add to start observations.unshift(1, 2); // [1, 2, 3, 6, 7] // add to location observations.slice(3, 0, 4, 5); // [1, 2, 3, 4, 5, 6, 7]
— удаление
// remove from end observations.pop(); // [1, 2, 3, 4, 5, 6] // remove from start observations.shift(); // [2, 3, 4, 5, 6] observations.shift(); // [3, 4, 5, 6] // remove from location observations.slice(1, 2); // [3, 6]
— объединение
const combined = [2, 3].concat([4, 5], [6, 7]); // [2, 3, 4, 5, 6, 7]
— подмножество
// slice from the end [1, 2, 3, 4, 5].slice(-2); // [4, 5] // slice from location [1, 2, 3, 4, 5].slice(2, 4); // [3, 4]
— скопировать
const copy1 = observations.concat(); const copy2 = observations.slice(); const copy3 = [...observations];
— сортировать/индексировать/включать
['b', 'a', 'c'].sort(); // ['a', 'b', 'c'] ['b', 'a', 'c'].reverse(); // ['c', 'a', 'b'], no sort ['a', 'b', 'c'].indexOf('a'); // 0 ['a', 'b', 'c'].indexOf('z'); // -1, not found ['a', 'a', 'b'].lastIndexOf('a'); // 1 ['a', 'b', 'c'].includes('a'); // true ['a', 'b', 'c'].includes('a', 1); // false
toSorted
,toReverse
: доступно в Chrome
— карта/фильтр
[1, 2, 3].map((item: number) => number + 1); // [2, 3, 4] [1, 2, 3].filter((item: number) => number > 1); // [2, 3]
- цепные методы вместе
— это массив?
Array.isArray([1, 2, 3]); // true Array.isArray('abc'); // false
— циклы
for (let index: number = 0; i < observations.length; ++index) for (let index: number in observations) for (const item of observations)
Кортежи
- каждый элемент строго типизирован
- конечное число элементов
readonly
для ограничения использования метода массива
type GameType = [string, number, string?]; const pong: readonly GameType = ['Pong', 1972]; const games: GameType[] = [ pong.slice(), ["The Oregon Trail", 1981, "MS DOS"], ] // nested tuples type Player = [string, GameType]; const bob: Player = ["bob", games[1]]; // deconstruct const [, year, os] = games[1];
Наборы
способ хранения различных значений данных
const items = new Set<string>(['a', 'a', 'b', 'c']); // { 'a', 'b', 'c' } items.add('d'); // { 'a', 'b', 'c', 'd' } // is something in the set? items.has('a'); // true // remove entry? items.delete('a'); // { 'b', 'c', 'd' } // how many items? items.size; // clear set items.clear(); // { } // looping for (const item of new Set<string>(['a', 'b', 'c'])) { }
.size
!!! вместо длиныfor / in
плохо… нет понятия индекса, нет определенного порядка
Карты
способ хранения пар ключ/значение, ключи упорядочены вставкой и имеют свойство размера
const observations = new Map<string, number>([ ['Tetris', 40], ['Pong', 30], ]); observations.set('Oregon Trail', 20); // get data? observations.get('Tetris'); // return type: (number | undefined) // has data? observations.has('Tetris'); // true // remove? observations.delete('Tetris'); // how many? observations.size; // clear? observations.clear(); // looping for (const [key, value] of observations) { }
.size
!!! вместо длины