Базовые типы

Урок: Базовые типы в TypeScript (string, number, boolean, any)

Введение

В прошлом уроке мы говорили о том, что TypeScript помогает заранее понимать, какие данные мы используем, и находить ошибки ещё до запуска кода.

Но возникает логичный вопрос: а как именно TypeScript «понимает», что за данные у нас есть?

Ответ — через типы.

Представь, что ты заполняешь форму на сайте:

  • в поле «Имя» — текст;
  • в поле «Возраст» — число;
  • в чекбоксе — да или нет.

Если в поле возраста ввести «двадцать», форма, скорее всего, не примет это значение. TypeScript делает примерно то же самое, только в коде.

В этом уроке мы разберём самые базовые типы, с которых начинается вся работа в TypeScript. Это фундамент, на котором будут строиться все следующие темы.


Что такое тип в TypeScript

Тип — это описание того, какие данные может содержать переменная.

Когда ты пишешь:

let message: string = 'Hello';
console.log('старт:', message, typeof message);
// message = 123; // ошибка TS: number нельзя присвоить string
console.log('тип message остаётся string');

ты говоришь:

  • message — это переменная;
  • string — это её тип (строка);
  • значит, в неё можно записывать только текст.

TypeScript сразу покажет проблему при присваивании числа; в JavaScript без аннотаций перезапись выполнилась бы.

Таким образом, тип — это ограничение, которое помогает не допускать ошибок.


Тип string

Тип string используется для текстовых значений.

const username: string = 'Alex';
const greetingText: string = 'Hello, world!';

Что важно понимать:

  • строка — это любой текст;
  • можно использовать одинарные, двойные кавычки или шаблонные строки.

Пример:

let name: string = 'Alex';
let greeting: string = `Hello, ${name}`;
console.log('шаблонная строка:', greeting);
// name = 42; // ошибка TS: number нельзя присвоить string
console.log('name остаётся строкой:', name);

Здесь:

  • ${name} — это подстановка значения внутрь строки;
  • такие строки называются шаблонными.

TypeScript не позволит записать число в переменную, объявленную как строка.


Тип number

Тип number используется для всех чисел.

let age: number = 25;
let price: number = 99.99;
console.log('числа:', age, price);
// age = '25'; // ошибка TS: string нельзя присвоить number
console.log('age по-прежнему number:', age);

В TypeScript (как и в JavaScript):

  • нет отдельного типа для целых и дробных чисел;
  • всё — это number.

Даже если значение выглядит как число, но записано как строка — это уже другой тип.


Тип boolean

Тип boolean — это логическое значение: true или false.

const isLoggedIn: boolean = true;
const isAdmin: boolean = false;

Этот тип часто используется:

  • в условиях (if);
  • для флагов (включено/выключено);
  • для проверки состояний.

Пример:

let isActive: boolean = true;
if (isActive) {
  console.log('Пользователь активен');
}
// isActive = 'yes'; // ошибка TS: string нельзя присвоить boolean
console.log('флаг boolean:', isActive);

TypeScript не даст записать строку в переменную типа boolean.


Тип any — когда можно всё

Тип any — это особый случай.

Он говорит: «в эту переменную можно записать что угодно».

let data: any = 'Hello';
data = 123;
data = true;
data = { name: 'Alex' };

TypeScript перестаёт проверять типы для такой переменной.

На первый взгляд это удобно, но есть проблема.

Пример:

let value: any = 123;
try {
  (value as any).toUpperCase();
} catch (e: unknown) {
  const msg = e instanceof Error ? e.message : String(e);
  console.log('с any TS не ругается, а в рантайме:', msg);
}

Почему так происходит:

  • TypeScript «не знает», что внутри value;
  • он не может проверить корректность вызова метода.

Когда использовать any

Тип any стоит использовать очень осторожно.

Он может быть полезен:

  • когда ты работаешь с неизвестными данными (например, ответ от сервера);
  • на ранних этапах разработки;
  • при постепенном переходе с JavaScript на TypeScript.

Но в большинстве случаев лучше избегать any, потому что:

  • он отключает основное преимущество TypeScript — проверку типов;
  • ошибки снова начинают появляться во время выполнения.

Как TypeScript может сам определить тип

Иногда TypeScript сам понимает тип без явного указания.

const city = 'Helsinki';
console.log('TS вывел тип string из литерала, typeof в рантайме:', typeof city);

Это называется выведение типов (type inference).

Но явное указание типов всё равно важно:

  • делает код понятнее;
  • помогает избежать неоднозначностей;
  • особенно полезно в функциях (что мы разберём в следующих уроках).

Связь с дальнейшими уроками

В этом уроке ты познакомился с базовыми типами:

  • string
  • number
  • boolean
  • any

Дальше мы будем использовать их постоянно:

  • в переменных;
  • в функциях;
  • в объектах;
  • в тестах Playwright.

Следующий шаг — научиться применять эти типы в реальном коде: типизировать переменные и функции.


Где это применяется на практике

Базовые типы используются везде:

  • имя пользователя — string;
  • возраст — number;
  • статус авторизации — boolean;
  • временные данные (иногда) — any.

Пример из реальной логики:

const username: string = 'Alex';
const age: number = 30;
const isLoggedIn: boolean = true;

Такой код:

  • легче читать;
  • проще поддерживать;
  • безопаснее изменять.

Итоговое понимание

Базовые типы — это основа TypeScript.

Они позволяют точно описать, какие данные используются в коде, и не дают случайно подставить неподходящее значение.

Главная идея урока:

TypeScript заставляет тебя явно думать о данных, с которыми ты работаешь, и тем самым предотвращает ошибки ещё на этапе написания кода.

Именно эти простые типы станут строительными блоками для всего, что мы будем делать дальше — от функций до Page Object в Playwright.