TS базовые типы

Базовые типы TypeScript — примитивы (string, number, boolean, null, undefined, symbol, bigint) и составные конструкции (массив, кортеж, объект, enum), которые описывают форму данных и включают статическую проверку во время компиляции.

Зачем нужно

  • Явная аннотация типов устраняет целый класс ошибок ещё до запуска кода
  • TypeScript выводит типы автоматически (type inference), поэтому аннотировать нужно только там, где компилятор не справляется
  • Понимание базовых типов — фундамент для union, generic, utility types и остальных продвинутых конструкций

Где используется

  • Любая переменная, параметр функции, возвращаемое значение — всё имеет тип
  • Описание формы данных API, стора, конфигурации
  • Пропсы React-компонентов, параметры хуков

Основной контент

Примитивы

const name: string = "Alice";
const age: number = 30;
const active: boolean = true;
const nothing: null = null;
const missing: undefined = undefined;
const id: symbol = Symbol("userId");
const big: bigint = 9007199254740993n;

// Type inference — TypeScript сам вычисляет тип
const inferred = "hello"; // string, аннотация не нужна

Массивы и кортежи

// Массив — однородная коллекция
const numbers: number = [1, 2, 3];
const words: Array<string> = ["a", "b", "c"];

// Кортеж (tuple) — фиксированная длина и типы позиций
type Point = [number, number];
const origin: Point = [0, 0];

type NamedPoint = [x: number, y: number, label: string];
const p: NamedPoint = [10, 20, "A"];

// Деструктуризация кортежа
const [x, y, label] = p;

Объектные типы: interface и type alias

// interface — для описания форм объектов, расширяемый
interface User {
  id: number;
  name: string;
  email: string;
  role?: "admin" | "user"; // опциональное поле
}

// type alias — для union, intersection, примитивов, кортежей
type UserId = number;
type Status = "active" | "inactive";

// Объектный тип через type alias
type Point = { x: number; y: number };

// Разница: interface можно расширить повторным объявлением (declaration merging)
interface User {
  createdAt: Date; // добавляется к предыдущему interface User
}

Enum

enum Direction {
  Up = "UP",
  Down = "DOWN",
  Left = "LEFT",
  Right = "RIGHT",
}

function move(dir: Direction): void {
  console.log(`Moving ${dir}`);
}

move(Direction.Up); // "Moving UP"
move("UP");         // Ошибка! Не string, а Direction

// const enum — стирается при компиляции, встраивается как литерал
const enum Status {
  Active,   // 0
  Inactive, // 1
}

Union и Intersection

// Union — одно из нескольких
type StringOrNumber = string | number;
function print(val: StringOrNumber): void {
  console.log(val);
}

// Discriminated union — union с общим полем-тегом
type Result<T> =
  | { success: true; data: T }
  | { success: false; error: string };

// Intersection — сочетание нескольких типов
type Admin = User & { permissions: string };

Аннотации функций

// Параметры и возвращаемый тип
function add(a: number, b: number): number {
  return a + b;
}

// Стрелочная функция
const multiply = (a: number, b: number): number => a * b;

// Опциональный параметр и параметр по умолчанию
function greet(name: string, greeting: string = "Hello"): string {
  return `${greeting}, ${name}!`;
}

// Rest-параметры
function sum(...nums: number): number {
  return nums.reduce((acc, n) => acc + n, 0);
}

Literal types

type Direction = "north" | "south" | "east" | "west";
type DiceValue = 1 | 2 | 3 | 4 | 5 | 6;

function roll: DiceValue {
  return (Math.floor(Math.random * 6) + 1) as DiceValue;
}

Частые ошибки

  • Аннотировать всё подряд — TypeScript хорошо выводит типы, избыточные аннотации только шумят
  • Путать null и undefined — в strictNullChecks режиме это разные типы и их нужно обрабатывать явно
  • Использовать Number, String, Boolean (с заглавной) вместо number, string, boolean — это объектные обёртки, не примитивы
  • Enum вместо union literal — строковые enum часто избыточны, type Dir = "up" | "down" читается лучше
  • Не указывать тип возвращаемого значения функции — при сложной логике компилятор может вывести неожиданный тип

Связанные темы

Ресурсы