Перейти к содержанию
Educora
Начальный14 мин1 / 8

Зачем нужен TypeScript?

Узнай, что TypeScript добавляет к JavaScript, как компилятор находит ошибки ещё до запуска кода и как настроить проект с `tsc`, `tsconfig.json` и Node.js.

Проверь себя
В этом уроке ты узнаешь
  • Объяснять, что такое статические типы и какие ошибки они ловят заранее
  • Описывать, как код на TypeScript превращается в JavaScript
  • Настраивать проект с tsc и простым tsconfig.json
  • Запускать .ts-файлы напрямую через Node.js или tsx и проверять типы командой tsc --noEmit

Представь интернет-магазин, где функция formatPrice(price) месяцами работает без сбоев. Однажды цена приходит из формы не числом, а строкой '4.5', и страница падает с ошибкой TypeError: price.toFixed is not a function. Покупатель увидел ошибку раньше программиста. TypeScript существует для того, чтобы такие ошибки находил ты, а не пользователи, — прямо в редакторе, в момент написания кода.

Что такое TypeScript?

Определение
TypeScript

Язык программирования от Microsoft, который добавляет к JavaScript статические типы. Любая корректная программа на JavaScript — это и программа на TypeScript; TypeScript лишь позволяет описать, какие значения хранят переменные, параметры и функции.

В JavaScript типы проверяются динамически — только когда строка кода действительно выполняется. В TypeScript они проверяются статически — по тексту программы, без её запуска. Тип пишут после двоеточия, и это называется аннотацией типа: price: number означает «price — всегда число». Если где-то передать строку, компилятор сразу сообщит об этом:

TypeScript
function formatPrice(price: number): string {
  return price.toFixed(2) + ' AZN';
}

console.log(formatPrice(4.5));
console.log(formatPrice('4.5'));
: string говорит, что функция возвращает строку. Второй вызов ошибочен.
Text
shop.ts:6:25 - error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'.

6 console.log(formatPrice('4.5'));
                          ~~~~~
Сообщение компилятора: файл, строка и столбец (shop.ts:6:25), код ошибки TS2345 и причина. Волнистая линия указывает точное место.

От TypeScript к JavaScript

Браузеры и Node.js по-настоящему понимают только JavaScript. Поэтому компилятор TypeScript — tsc — делает две вещи: проверяет типы и создаёт обычный JavaScript, из которого все типы просто удалены. Вот небольшой файл и JavaScript, который tsc из него получает:

TypeScript
type User = { name: string; age: number };

export function greet(user: User): string {
  return `Hello, ${user.name}! You are ${user.age}.`;
}

const aysel: User = { name: 'Aysel', age: 14 };
console.log(greet(aysel));
Ожидаемый результат
Hello, Aysel! You are 14.
greet.ts: type User описывает форму объекта.
JavaScript
export function greet(user) {
    return `Hello, ${user.name}! You are ${user.age}.`;
}
const aysel = { name: 'Aysel', age: 14 };
console.log(greet(aysel));
Результат tsc — greet.js: строка type User и все аннотации исчезли, а логика осталась прежней.

Что дают типы

  • Ошибки ловятся рано: опечатка в имени свойства, неверный аргумент или забытая проверка на null находятся ещё до запуска программы.
  • Умный редактор: редактор знает, что такое каждое значение, поэтому автодополнение, переход к определению и безопасное переименование по всему проекту просто работают.
  • Типы служат документацией: по заголовку formatPrice(price: number): string понятно, как пользоваться функцией, даже не читая её тело.
  • Безопасные изменения в больших проектах: стоит изменить параметры функции, и компилятор перечислит все места, которые нужно исправить.

Настройка проекта

  1. 1
    Установи TypeScript

    В папке проекта выполни npm install --save-dev typescript. Компилятор попадёт в node_modules, а вызывать его нужно через npx tsc.

  2. 2
    Создай файл настроек

    npx tsc --init создаёт файл tsconfig.json с рекомендуемыми настройками.

  3. 3
    Напиши код

    Помести код в файл src/index.ts.

  4. 4
    Скомпилируй и запусти

    npx tsc проверяет весь проект и записывает JavaScript в папку dist/; затем запусти его командой node dist/index.js.

JSON
{
  "compilerOptions": {
    "target": "es2022",
    "module": "nodenext",
    "strict": true,
    "rootDir": "src",
    "outDir": "dist"
  }
}
Минимальный tsconfig.json. tsc --init создаёт больше параметров, но основные — эти.
ПараметрЧто делает
targetвыбирает, какую версию JavaScript создавать, например es2022
moduleвыбирает систему модулей; nodenext следует правилам современного Node.js
strictвключает весь набор строгих проверок — всегда оставляй true
rootDir / outDirгде лежат исходники .ts и куда записывать результат .js

Запуск .ts-файлов напрямую

Современный Node.js (версии 22.18 и новее, включая Node.js 24) умеет запускать .ts-файл напрямую: node index.ts. Для этого используется удаление типов (type stripping): Node.js просто вырезает типы и выполняет оставшийся JavaScript. Инструмент tsx делает то же самое и в более старых версиях Node.js.

Terminal
node src/index.ts      # Node.js 22.18+: strip the types and run
npx tsx src/index.ts   # tsx: run TypeScript on older Node.js too
npx tsc --noEmit       # only check the types, write no files
Два способа запустить код и одна команда для проверки типов.

Главное

  • TypeScript добавляет к JavaScript статические типы; ошибки находятся ещё до запуска кода.
  • Аннотацию типа пишут после двоеточия: price: number.
  • tsc проверяет типы и создаёт обычный JavaScript без типов; во время выполнения типов нет.
  • Настройки проекта хранятся в tsconfig.json; strict: true должен быть включён всегда.
  • node file.ts и tsx запускают код, но не проверяют типы — для этого есть tsc --noEmit.

Проверь себя

Вопросов: 10. Каждый правильный ответ приносит XP.

1 / 10
Что TypeScript в основном добавляет к JavaScript?