JavaScript & TypeScriptМодуль 7: Основы TypeScript
Массивы и кортежи
Типизация массивов и кортежей
Цель урока
В этом уроке ты научишься:
- Типизировать массивы
- Использовать кортежи
- Применять readonly
Массивы
Синтаксис
// Способ 1: Type[]
let numbers: number[] = [1, 2, 3];
let names: string[] = ["Иван", "Мария"];
// Способ 2: Array<Type>
let numbers2: Array<number> = [1, 2, 3];
let names2: Array<string> = ["Иван", "Мария"];Типизация элементов
let numbers: number[] = [1, 2, 3];
numbers.push(4); // OK
// numbers.push("5"); // Ошибка!
let first: number = numbers[0]; // тип numberМассивы объектов
interface User {
name: string;
age: number;
}
let users: User[] = [
{ name: "Иван", age: 25 },
{ name: "Мария", age: 22 }
];Кортежи (Tuples)
Массив фиксированной длины с разными типами:
// [string, number]
let tuple: [string, number] = ["Иван", 25];
let name: string = tuple[0]; // "Иван"
let age: number = tuple[1]; // 25
// tuple[2]; // Ошибка: доступ за пределыИменованные кортежи
type Point = [x: number, y: number];
type RGB = [red: number, green: number, blue: number];
let point: Point = [10, 20];
let color: RGB = [255, 128, 0];Опциональные элементы
type Point2D = [number, number];
type Point3D = [number, number, number?];
let point2d: Point2D = [1, 2];
let point3d: Point3D = [1, 2, 3];
let point3d2: Point3D = [1, 2]; // OK, z опционаленreadonly
Массивы
let numbers: readonly number[] = [1, 2, 3];
// numbers.push(4); // Ошибка!
// numbers[0] = 10; // Ошибка!
let first = numbers[0]; // OK — чтение разрешеноКортежи
let point: readonly [number, number] = [10, 20];
// point[0] = 5; // Ошибка!ReadonlyArray
let numbers: ReadonlyArray<number> = [1, 2, 3];
// То же самое, что readonly number[]Деструктуризация
let tuple: [string, number, boolean] = ["Иван", 25, true];
let [name, age, active] = tuple;
// name: string, age: number, active: booleanПрактические примеры
// Функция возвращает кортеж
function getNameAndAge(): [string, number] {
return ["Иван", 25];
}
let [name, age] = getNameAndAge();
// useState в React
function useState<T>(initial: T): [T, (value: T) => void] {
let state = initial;
const setState = (value: T) => { state = value; };
return [state, setState];
}Практика
Задание 1: Массив
Задача: Создай типизированный массив чисел.
Запустите код для проверки
Loading...
Ваш вывод:
Ожидаемый результат:
150
Задание 2: Кортеж
Задача: Создай кортеж для координат.
Запустите код для проверки
Loading...
Ваш вывод:
Ожидаемый результат:
10 20
Задание 3: Функция с кортежем
Задача: Создай функцию, возвращающую кортеж.
Запустите код для проверки
Loading...
Ваш вывод:
Ожидаемый результат:
3 1
Проверь себя
- Чем массив отличается от кортежа?
- Как сделать массив неизменяемым?
- Как типизировать массив объектов?