DEV Community

Андрей Викулов (VProger)
Андрей Викулов (VProger)

Posted on • Originally published at viku-lov.ru on

TypeScript: основы и философия типизации в JavaScript

TypeScript: основы и философия типизации в JavaScript

TypeScript: основы и философия типизации в JavaScript

Если пишешь на JavaScript больше пары месяцев, наверняка сталкивался с этим:

  • undefined is not a function
  • Cannot read property 'x' of null
  • код работает не так , как ожидалось, но без ошибок

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

В этой статье — база :

  • что такое TypeScript и зачем он нужен
  • его философия
  • кто и зачем его создал
  • как он развивался
  • и первые примеры кода с пояснениями

Это старт серии. Дальше пойдём глубже.


Что такое TypeScript простыми словами

TypeScript — это надстройка над JavaScript.

Формально:

TypeScript — это JavaScript + типы + проверка на этапе разработки

Ключевой момент:

  • браузеры не понимают TypeScript
  • TypeScript всегда компилируется в обычный JavaScript

TypeScript (.ts) → компилятор → JavaScript (.js) → браузер / Node.js

Enter fullscreen mode Exit fullscreen mode

Кто создал TypeScript и зачем

TypeScript был представлен в 2012 году компанией Microsoft.

Главный архитектор языка — Anders Hejlsberg

(он же автор C#, Delphi и Turbo Pascal — человек знает толк в типах).

Зачем он вообще появился

В начале 2010-х JavaScript начали использовать не для скриптов , а для:

  • SPA
  • крупных интерфейсов
  • корпоративных приложений

JavaScript не был к этому готов:

  • динамическая типизация
  • отсутствие контрактов
  • сложность поддержки больших кодовых баз

TypeScript решал ровно эту боль.


Философия TypeScript

Важно понять одну вещь сразу:

TypeScript не пытается заменить JavaScript

Его философия:

  • не ломать экосистему
  • не требовать переписывать всё
  • быть инструментом, а не религией

Ключевые принципы

  1. JavaScript — валидный TypeScript

// обычный JS — уже валидный TS

const sum = (a, b) => a + b;

Enter fullscreen mode Exit fullscreen mode
  1. Типы — для разработчика, не для рантайма

Типы:

  • помогают IDE
  • помогают при рефакторинге
  • ловят ошибки раньше

В рантайме их не существует.

  1. Статическая проверка до запуска

function multiply(a: number, b: number) {

return a \* b;

}

multiply(2, "3"); // ❌ ошибка ещё до запуска

Enter fullscreen mode Exit fullscreen mode

Почему JavaScript без типов — это проблема

Простой пример на JavaScript:


function getUserName(user) {

return user.profile.name.toUpperCase();

}

Enter fullscreen mode Exit fullscreen mode

Что может пойти не так?

  • user = null — получишь Cannot read property 'profile' of null
  • profile = undefined — получишь Cannot read property 'name' of undefined
  • name не строка — toUpperCase is not a function
  • user вообще не объект — та же история

Ошибки всплывут только в рантайме , когда пользователь уже на сайте. А если это происходит в продакшене в пятницу вечером — приятного мало.

Реальный пример из практики:


// Код работает локально, потому что данные всегда правильные

function calculateTotal(items) {

return items.reduce((sum, item) => sum + item.price, 0);

}

// Но в проде приходит:

calculateTotal(null); // 💥 Cannot read property 'reduce' of null

calculateTotal([{ price: "10" }]); // "010" вместо 10

Enter fullscreen mode Exit fullscreen mode

TypeScript поймает это ещё до запуска.


Тот же пример на TypeScript


type User = {

profile: {

name: string;

};

};

function getUserName(user: User): string {

return user.profile.name.toUpperCase();

}

Enter fullscreen mode Exit fullscreen mode

Что мы получили:

  • контракт структуры данных — нельзя передать что попало
  • автодополнение — IDE подсказывает profile.name автоматически
  • защиту от неправильных данных — попытка передать null вызовет ошибку компиляции

IDE уже знает , что такое user, и подсказывает доступные поля.

А если нужно обработать случай, когда user может быть null:


function getUserName(user: User | null): string {

if (!user) {

return "Guest";

}

return user.profile.name.toUpperCase();

}

Enter fullscreen mode Exit fullscreen mode

TypeScript заставит проверить null перед использованием. Это не опционально — это обязательно.


Типизация: зачем она вообще нужна

Типизация решает несколько реальных задач, которые возникают в работе каждый день:

  1. Документация в коде

function fetchUser(id: number): Promise<User> {

// ...

}

Enter fullscreen mode Exit fullscreen mode

Без комментариев понятно:

  • что принимает функция (id — число)
  • что возвращает (Promise)

Когда через полгода вернёшься к этому коду, не нужно гадать, что там происходит. Типы всё расскажут.

  1. Раннее обнаружение ошибок

const age: number = "25";

// ❌ Type 'string' is not assignable to type 'number'

Enter fullscreen mode Exit fullscreen mode

Ошибка до:

  • сборки
  • деплоя
  • продакшена
  • того, как пользователь наткнётся на баг

Это экономит время и нервы. Особенно когда работаешь в команде — один разработчик передал не тот тип, другой получил ошибку сразу, а не через неделю.

  1. Безопасный рефакторинг

Переименовал поле в интерфейсе — TypeScript покажет все места , где ты сломал контракт. Не нужно вручную искать по всему проекту.


interface User {

userName: string; // было name, переименовал

}

// TypeScript найдёт все места, где используется user.name

// и покажет ошибку

Enter fullscreen mode Exit fullscreen mode
  1. Автодополнение в IDE

Когда пишешь user. — IDE показывает все доступные поля. Не нужно помнить структуру объекта или лезть в документацию.

  1. Защита от опечаток

interface Config {

apiUrl: string;

timeout: number;

}

const config: Config = {

apiUrl: "https://api.example.com",

timeout: 5000

};

// Опечатка в имени поля

console.log(config.apiUrll); // ❌ Ошибка: Property 'apiUrll' does not exist

Enter fullscreen mode Exit fullscreen mode

Без TypeScript такая опечатка прошла бы незамеченной и код упал бы в рантайме.


TypeScript — это не только типы

Кроме типов, он добавляет:

  • интерфейсы
  • дженерики
  • enum (да, спорные, но полезные)
  • utility types
  • строгие режимы проверки

Пример интерфейса:


interface Article {

id: number;

title: string;

published: boolean;

}

Enter fullscreen mode Exit fullscreen mode

Использование:


const article: Article = {

id: 1,

title: "TypeScript basics",

published: true,

};

Enter fullscreen mode Exit fullscreen mode

Практические примеры кода

Для детальных примеров смотри готовые сниппеты:

  • Типизация API-ответа с дженериками — работа с ApiResponse, обработка ошибок
  • Дженерики для переиспользуемых функций — универсальные функции без потери типизации
  • Типизация событий и обработчиков — работа с DOM-событиями и кастомными событиями
  • Утилитарные типы — Partial, Pick, Omit, Required, Readonly

Эти примеры показывают реальные паттерны, которые используются в продакшене.


Как TypeScript развивается

С 2012 года TypeScript прошёл путь от «странной надстройки» до де-факто стандарта для фронтенда.

Сегодня TypeScript используют:

  • React, Vue, Angular — все крупные фреймворки
  • Astro, Next.js, SvelteKit — современные метафреймворки
  • Node.js, Deno, Bun — серверные платформы
  • VS Code, GitHub Copilot — инструменты разработки

Без него современный фронтенд почти не живёт.

Интересные факты о TypeScript

TypeScript 7.0 (Project Corsa) — в 2025-2026 годах Microsoft работает над нативной версией компилятора, которая обещает ускорение в 10 раз. Компилятор переписывается на Go для параллельной работы и снижения потребления памяти.

Статистика GitHub: TypeScript входит в топ-5 самых популярных языков на платформе. Больше 15 миллионов репозиториев используют .ts файлы.

Принятие в индустрии: по данным Stack Overflow 2025, TypeScript используют 78% фронтенд-разработчиков. Это не просто мода — это практическая необходимость для больших проектов.


Где TypeScript особенно полезен

TypeScript особенно полезен в:

  • больших проектах (от 10+ файлов)
  • долгоживущих кодовых базах (проекты, которые живут годами)
  • командах из нескольких разработчиков (типы как контракт между разработчиками)
  • сложных API и данных (когда структура данных важна)

Если проект больше одного файла и живёт дольше месяца — TypeScript окупается быстро. Первые полчаса на типизацию экономят часы отладки позже.


Частый миф: «TypeScript замедляет разработку»

На старте — да, немного. Нужно время, чтобы привыкнуть к синтаксису типов и понять, что писать явно, а что TypeScript может вывести автоматически.

Но дальше TypeScript ускоряет работу:

Меньше багов

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

Меньше ручной проверки

IDE подсказывает, что не так. Не нужно вручную проверять документацию API или структуру данных.

Меньше страха рефакторинга

TypeScript покажет все места, которые нужно обновить после изменений. Можно смело рефакторить, не боясь что-то сломать.

Быстрее онбординг новых разработчиков

Новый человек в команде быстрее разберётся в проекте, потому что типы показывают структуру данных и контракты функций.

В долгую — быстрее. Особенно когда проект растёт и меняется команда.

Реальный пример из практики

Без TypeScript:

  1. Написал функцию
  2. Запустил код
  3. Получил ошибку в рантайме
  4. Потратил время на отладку
  5. Исправил
  6. Повторил пункты 2-5 несколько раз

С TypeScript:

  1. Написал функцию с типами
  2. TypeScript сразу показал ошибки
  3. Исправил до запуска
  4. Запустил — работает

Экономия времени очевидна.


Что дальше в серии

Это была вводная часть. Дальше пойдём по шагам:

  1. Установка TypeScript и настройка tsconfig.json
  2. Базовые типы: string, number, boolean, array, object
  3. any, unknown, never — и почему any лучше избегать
  4. Интерфейсы vs типы — когда что использовать
  5. Типизация функций и API

В каждой части будут практические примеры и реальные кейсы из работы.


Итог

TypeScript — это:

  • не про усложнение (хотя поначалу может так показаться)
  • не про «модно» (хотя он действительно популярен)
  • не про фреймворки (хотя все фреймворки его поддерживают)

Это про:

  • контроль над кодом (знаешь, что куда передаётся)
  • читаемость (типы как документация)
  • предсказуемость (меньше сюрпризов в рантайме)
  • скорость разработки в долгую (меньше багов = меньше времени на отладку)

Если хочешь писать код, который не стыдно поддерживать через год — TypeScript твой союзник.

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

Продолжение — скоро 👌

Read more on viku-lov.ru

Top comments (0)