Массивы

Последнее обновление: 15.05.2021

Массивы определяются с помощью выражения [] и также являются строго типизированными. То есть если изначально массив содержит строки, то в будущем он сможет работать только со строками.

let list: number[] = [10, 20, 30];
let colors: string[] = ["red", "green", "blue"];
console.log(list[0]);
console.log(colors[1]);

Как и в JavaScript, с помощью индексов можно обращаться к элементам массива.

Альтернативный способ определения массивов представляет применение типа Array<>, где в фигурных скобках указывается тип элементов массива:

let names: Array<string> = ["Tom", "Bob", "Alice"];
console.log(names[1]);	// Bob

Но фактически такие формы массивов, как number[] или string[] являются сокращением соответственно типов Array<number> или Array<string>

В остальном массивы в TypeScript поддерживают все те же операции, что и массивы в JavaScript.

ReadonlyArray

Массивы позволяют изменять значения своих элементов:

const people = ["Tom", "Bob", "Sam"];
people[1] = "Kate";
console.log(people[1]);	// Kate

Но TypeScript также позволяет определять массивы, элементы которых нельзя изменять. Для этого применяется тип ReadonlyArray<>, для которого в угловых скобках указывается тип элементов массива.

В отличие от типа Array для типа ReadonlyArray мы не можем принимать конструктор, как в следующем случае:

const people: ReadonlyArray<string> = new ReadonlyArray("Tom", "Bob", "Sam");

Вместо этого необходимо передать значения в виде обычного массива:

const people: ReadonlyArray<string> = ["Tom", "Bob", "Sam"];

Для определения подобных массивов также можно использовать сокращение типа - readonly Тип_данных[]:

const people: readonly string[]= ["Tom", "Bob", "Sam"];

Массив ReadonlyArray поддерживаtт большинство тех же операций, что и обычные массивы, за тем исключением операций, которые изменяют массив и его элементы. Так, мы не можем менять отдельные значения:

const people: ReadonlyArray<string> = ["Tom", "Bob", "Sam"];
people[1] = "Kate";		// ! Ошибка элементы массива ReadonlyArray нельзя изменить

Также мы не можем добавлять новые или удалять уже имеющиеся элементы:

const people: ReadonlyArray<string> = ["Tom", "Bob", "Sam"];

people.push("Kate");	// ! Ошибка -  нельзя добавить новые элементы
people.pop();			// ! Ошибка -  нельзя удалить существующие элементы

Более того при компиляции компилятор сообщит нам, что для типа ReadonlyArray не определены методы push() и pop(). Это относится ко всем операциям, которые изменяют массив.

Все остальные операции, которые предусматривают чтение массива, мы по прежнему можем использовать:

function printUsers(users: readonly string[]) {
	for(const user of users){
		console.log(user);
	}
}

function usersToString(users: ReadonlyArray<string>): String{
	
	return users.join(", ");
}

const people: readonly string[]= ["Tom", "Bob", "Sam"];

printUsers(people);
console.log(usersToString(people));

Декомпозиция массивов

Как и в javascript, массивы поддерживают декомпозицию на константы и переменные. Например:

const people: string[]= ["Tom", "Bob", "Sam"];

const [first, second, third] = people;
console.log(first);		// Tom
console.log(second);	// Bob
console.log(third);		// Sam

Здесь массив people раскладывается на три константы - first, second, third. Значения массива передаются константам/переменным по позиции, то есть первой константе - первый элемент массива, второй константе - второй элемент и так далее. Причем констант/переменных не больше, чем элементов массива.

С помощью оператора ... можно указать массив, в который будут помещаться все оставшиеся элементы раскладываемого массива, которые не вошли в предыдущие переменные/константы:

const people: string[]= ["Tom", "Bob", "Sam"];

const [first, ...rest] = people;
console.log(first);		// Tom
console.log(rest[0]);	// Bob
console.log(rest[1]);		// Sam

Здесь константа first принимает первый элемент массива - "Tom". Все оставшиеся элементы кортежа будут помещаться в массив rest.

Также можно оставить пустое место вместо переменной/константы, если мы хотим пропустить соответствующий элемент массива:

const people: string[]= ["Tom", "Bob", "Sam", "Kate"];

const [, second, , forth] = people;	// пропускаем первый и третий элементы массива
console.log(second);		// Bob
console.log(forth);			// Kate
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850