Базовые типы: string, number, boolean
Три кита системы типов и магия автоматического вывода.
Аннотация типа — запись вида
let x: number, которая фиксирует, какие значения допустимы для переменной.
Примитивы
Базовые типы повторяют примитивы JavaScript. Аннотация ставится через двоеточие после имени:
let userName: string = "Аня";
let age: number = 30;
let isAdmin: boolean = false;
Если попытаться присвоить значение не того типа, компилятор остановит:
age = "тридцать";
// Ошибка: Type 'string' is not assignable to type 'number'.
Тип number в TypeScript один — он покрывает и целые, и дробные числа, как и в JavaScript. Отдельного int или float нет.
Вывод типов (type inference)
Чаще всего аннотацию писать не нужно. Если переменная сразу инициализируется значением, TypeScript сам выводит её тип:
let city = "Москва"; // тип выведен как string
let count = 42; // выведен как number
city = "Казань"; // ок
count = "много"; // Ошибка: Type 'string' is not assignable to type 'number'.
Здесь мы не писали типы, но TypeScript всё равно их знает и защищает переменные. Это важная философия языка: писать минимум аннотаций, доверяя выводу. Явные типы ставят там, где вывод невозможен или где аннотация улучшает читаемость.
Когда аннотация нужна
Аннотация обязательна, если значение присваивается не сразу:
let result: number; // объявили без значения
result = compute(); // тип уже известен — проверка работает
Без аннотации здесь TypeScript вывел бы тип any — «что угодно», и проверка отключилась бы. Поэтому при отложенной инициализации тип указывают явно.
Поведение в рантайме совпадает с JS
Помните: после компиляции типы исчезают, и арифметика работает как в обычном JavaScript. Пример с реальным выводом:
const price = 250;
const quantity = 3;
const total = price * quantity;
console.log("Сумма заказа: " + total + " руб.");
console.log("Тип переменной total:", typeof total);
Вывод:
Сумма заказа: 750 руб. Тип переменной total: number
Литеральный тип у const
Тонкость: для const TypeScript выводит не широкий тип, а литеральный — конкретное значение:
const role = "admin"; // тип не string, а ровно "admin"
let mode = "dark"; // а тут тип string (let можно переприсвоить)
Это логично: const нельзя переприсвоить, значит значение точно останется "admin". Литеральные типы пригодятся дальше для union-типов.
Итог
- Базовые типы:
string,number(целые и дробные вместе),boolean. - При инициализации тип выводится автоматически — лишние аннотации не нужны.
- Явная аннотация обязательна при отложенном присваивании, иначе тип станет
any.