Базовые типы в TypeScript

TypeScript предоставляет систему типов, которая позволяет явно указывать или автоматически выводить типы переменных, параметров функций и возвращаемых значений. Это помогает избежать ошибок и делает код понятнее.

Примитивные типы

Основные примитивные типы в TypeScript совпадают с соответствующими значениями в JavaScript:

  • string — текстовые данные
  • number — числа (все числа в JS/TS имеют тип number, целые и дробные)
  • boolean — логические значения (true / false)
  • null — отсутствие значения (явный null)
  • undefined — значение по умолчанию для неинициализированных переменных

Пример:

let name: string = "Alice";
let age: number = 30;
let isActive: boolean = true;

TypeScript обычно выводит эти типы автоматически, поэтому явное указание часто избыточно:

let name = "Alice"; // TypeScript выводит: string

Специальные типы

any

Тип any отключает проверку типов. Переменная типа any может принимать любое значение и использоваться в любом контексте:

let data: any = "text";
data = 42;        // допустимо
data.toUpperCase(); // допустимо, но может вызвать ошибку во время выполнения

Использование any нарушает преимущества TypeScript и рекомендуется только при миграции старого кода или работе с динамическими данными, когда тип невозможно определить.

unknown

Тип unknown представляет значение, тип которого неизвестен. В отличие от any, он безопасен: TypeScript требует проверки перед использованием:

let data: unknown = "text";

// Ошибка: нельзя вызывать методы на unknown без проверки
// data.toUpperCase();

if (typeof data === "string") {
  console.log(data.toUpperCase()); // теперь безопасно
}

unknown — предпочтительная замена any при работе с внешними данными (например, ответами от API).

void

Тип void означает, что функция ничего не возвращает:

function logMessage(message: string): void {
  console.log(message);
}

Если функция не имеет оператора return или содержит return; без значения, её тип возвращаемого значения — void.

never

Тип never используется для функций, которые никогда не завершаются нормально — например, всегда выбрасывают ошибку или зацикливаются:

function throwError(message: string): never {
  throw new Error(message);
}

function infiniteLoop(): never {
  while (true) {}
}

Тип never также возникает в случае исчерпывающей проверки типов (например, в switch), но это выходит за рамки базового уровня.