Как типизировать массивы TypeScript

16 октября 2026
Автор

Вячеслав Руденко

В TypeScript вы можете объявить тип элементов массива, указав его в угловых скобках после имени переменной. Например:

const ages: number[] = [18, 35, 51, 28, 12];

В этом примере мы объявляем массив с именем ages, который содержит только числовые значения. Это означает, что при попытке добавить в массив что-то другое, TypeScript выдаст ошибку на этапе компиляции.

Правильная типизация массивов — это фундамент безопасного и предсказуемого кода. Ошибки в типизации массивов могут привести к непредсказуемым runtime-ошибкам и затруднить отладку. Если вы хотите детальнее изучить систему типов TypeScript и научиться писать надежный код — приходите на наш большой курс TypeScript с нуля. На курсе 192 уроков и 17 упражнений, AI-тренажеры для безлимитной практики с кодом и задачами 24/7, решение задач с живым ревью наставника, еженедельные встречи с менторами.

Array

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

const users: Array<{name: string; age: number}> = [
  {name: 'Анна', age: 25},
  {name: 'Петр', age: 30},
  {name: 'Иван', age: 22},
];

Выглядит не особо красиво, давайте попробуем так:

type UserType = {
  name: string;
  age: number;
};

const users: Array<UserType> = [
  {name: 'Анна', age: 25},
  {name: 'Петр', age: 30},
  {name: 'Иван', age: 22},
];

Курс по теме

Курс TypeScript с нуля с нуля

40 000+ студентов · рейтинг 4.8 · гарантия возврата 30 дней

Типизация массивов с использованием кортежей

Когда нужно типизировать массив, содержащий элементы разных типов, можно воспользоваться кортежами. В этом случае мы указываем типы элементов в круглых скобках:

const point: [number, number] = [0, -5];

В этом примере мы рассматриваем координаты точки на оси координат

Давайте рассмотрим ошибки:

const point: [number, number, string] = [0, -5, 9];
// Type 'number' is not assignable to type 'string'.

const point3D: [number, number] = [0, -5, 9];
// Type '[number, number, number]' is not assignable to type '[number, number]'.
// Source has 3 element(s) but target allows only 2.

ReadonlyArray

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

const fruits: ReadonlyArray<string> = ['Яблоко', 'Банан', 'Апельсин'];

fruits.push('Груша'); // Property 'push' does not exist on type 'readonly string[]`
fruits[1] = 'Груша'; // Index signature in type 'readonly string[]' only permits reading

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

const fruits: readonly string[] = ['Яблоко', 'Банан', 'Апельсин'];

fruits.push('Груша'); // Property 'push' does not exist on type 'readonly string[]
fruits[1] = 'Груша'; // Index signature in type 'readonly string[]' only permits reading

Глубокое понимание типизации массивов невозможно без знания продвинутых концепций TypeScript, таких как generics, mapped types и conditional types. На нашем курсе TypeScript с нуля вы получите комплексные знания о системе типов TypeScript и научитесь эффективно использовать их на практике. В первых 3 модулях уже доступно бесплатное содержание — начните погружаться в TypeScript прямо сегодня.

Стрелочка влевоСлужебный тип Awaited в TypeScriptКак правильно использовать тип anyСтрелочка вправо

Постройте личный план изучения Typescript до уровня Middle — бесплатно!

Typescript — часть карты развития Frontend

  • step100+ шагов развития
  • lessons30 бесплатных лекций
  • lessons300 бонусных рублей на счет

Бесплатные лекции

Все гайды по Typescript

Переменные и константы в TypeScriptTypeScript: ключевое слово using и Explicit Resource ManagementНастройка типов с declare module в TypeScriptTypeScript типизация в Node.js проектеTypeScript ESLint — настройка линтера для проектаTypeScript 5: новые возможности и измененияПреобразование к типу в TypeScript (Type Assertion)Кортежи в TypeScripttsconfig.json — полный разбор настроек TypeScript компилятораTypeScript с tRPC — типобезопасный APITypeScript strict и strictNullChecks — строгий режимБезопасные env переменные в TypeScriptКак собрать TypeScript проект с RollupОбъекты в TypeScriptMonorepo с Turborepo и TypeScriptTypeScript с Hono: типобезопасный веб-фреймворкФункции в TypeScriptТип функции и стрелочные функции в TypeScriptТипизация ошибок и обработка исключений в TypeScriptTypeScript ключевое слово declareМассивы в TypeScript
Как правильно использовать тип UnknownИспользование Union в TypeScriptTypeScript с GraphQL — типизация и кодогенерацияТипы данных в TypeScriptType Guards в TypeScript — как работает сужение типовSymbols в TypeScriptСтруктурная типизация в TypeScriptNull и Undefined в TypeScriptТип never в TypeScriptСужение типов (Narrowing) в TypeScriptПонимание Literal Types. Ключевые аспекты и примеры использованияОператор infer в Typescript?TypeScript с Express.js: типизация маршрутов и middlewareТипы функций в TypeScript. Руководство для разработчиковEnums vs Union Types в TypeScript: сравнение и выборEnums в TypeScriptДискриминированные объединения в TypeScriptСлужебный тип Awaited в TypeScriptКак типизировать массивы TypeScriptКак правильно использовать тип any
Вариативные кортежи (Variadic Tuple Types) в TypeScriptUtility Types в TypeScript — полный разбор встроенных утилитТипизация ответов API с fetch и generic-функцииtypeof в TypeScriptTemplate Literal Types в TypeScriptОператор satisfies в TypeScriptПаттерн Result для обработки ошибок без исключенийУтилитный тип NoInfer в TypeScriptMapped Types в TypeScriptОператор типа keyof в TypeScriptРуководство по тестированию TypeScript с JestТипы доступа по индексу в TypeScriptGenerics в TypeScriptconst assertions в TypeScriptУсловные типы в TypeScriptBranded Types в TypeScript — номинальная типизацияПродвинутые Conditional Types в TypeScript
Открыть базу знаний

Лучшие курсы по теме

изображение курса

TypeScript с нуля

Антон Ларичев
AI-тренажерыAI-тренажеры
Практика в студииПрактика в студии
Гарантия
Бонусы
иконка звёздочки рейтинга4.8
3 999 ₽ 6 990 ₽
Подробнее
изображение курса

CSS Flexbox

Антон Ларичев
Гарантия
Бонусы
иконка звёздочки рейтинга4.9
бесплатно
Подробнее
изображение курса

Next.js - с нуля

Антон Ларичев
AI-тренажерыAI-тренажеры
Практика в студииПрактика в студии
Гарантия
Бонусы
иконка звёздочки рейтинга4.7
3 999 ₽ 6 990 ₽
Подробнее

Отправить комментарий