Перейти к основному содержимому

TypeScript — итоги

Разработчику Архитектору

Дальше: Чек-лист · Карта раздела · О разделе


Кратко — что стоит унести из раздела TypeScript. Если пункт кажется туманным — откройте карту или статью по ссылке в ответе.


FAQ — часто задаваемые вопросы

Типичные сбои после изучения раздела. Вопросы для самопроверки — в чек-листе.

Вопрос. TypeScript и JavaScript — это один язык?

Ответ. TypeScript — надмножество JavaScript: пишете JS + типы, tsc выдаёт обычный JS. Runtime — всегда JavaScript. → история, О разделе, обзор в JS.

Вопрос. IDE показывает ошибки типов, а node dist/index.js выполняется — нужен ли TypeScript?

Ответ. Ошибки типов ловятся до запуска и при рефакторинге по проекту. Runtime (сеть, логика) TS не отменяет. → Компиляция, TypeScript Server.

Вопрос. Object is possibly 'undefined' — как исправить?

Ответ. Включён strictNullChecks. Проверьте значение (if, ??, ?.), сузьте union. Не злоупотребляйте !. → Типы и типизация, переменные.

Вопрос. Везде any, чтобы компилятор замолчал — нормально?

Ответ. any отключает проверку. Для внешних данных — unknown + guard или Zod. → рекомендации, Типы и типизация.

Вопрос. Cannot find module 'react' или нет типов у пакета.

Ответ. Установите пакет и при необходимости @types/имя. Проверьте moduleResolution в tsconfig. → Форматы и подключение, Экосистема.

Вопрос. Type 'string' is not assignable to type 'number'.

Ответ. Контракт не совпадает с данными. Пройдите цепочку: API → DTO → domain. → Типы и типизация, функции, TypeScript и Node.js.

Вопрос. Нужно ли везде писать let name: string?

Ответ. Нет: TS выводит тип из значения. Явная аннотация — при отложенной инициализации, публичном API и пустых коллекциях. Проверка только на этапе tsc/IDE. → переменные, Типы и типизация.

Вопрос. Чем structural typing отличается от утиной типизации в JS?

Ответ. Идея та же (важна форма), но в TS ошибки видны до запуска. → Типы и типизация, классы.

Вопрос. interface и type — когда что выбирать?

Ответ. interface — объекты и расширение; type — union, tuple, mapped types. → синтаксис.

Вопрос. Как типизировать загрузку данных в UI?

Ответ. Discriminated union: idle | loading | success | error по полю status. → Асинхронность, ветвления, TypeScript и React.

Вопрос. async/await — нужен ли тип Promise?

Ответ. Да: Promise<T> и возврат async-функции. В catchunknown. → Асинхронность.

Вопрос. React: нет children в props.

Ответ. Добавьте children?: React.ReactNode. События — ChangeEvent<HTMLInputElement>. → 21.md.

Вопрос. Разделение DTO и entity в backend-проектах

Ответ. HTTP/JSON ≠ доменная модель и схема БД. Маппер на границе. → TypeScript и Node.js, Паттерны.

Вопрос. Monorepo тормозит IDE и tsc.

Ответ. project references, composite, tsc -b. → Экосистема, 16.md.

Вопрос. Собрал проект, в браузере старый JS.

Ответ. Пересоберите, проверьте outDir, кэш bundler. → 4.md, 15.md.


Главные выводы раздела

  1. TypeScript добавляет статическую проверку к JavaScript; в runtime выполняется JS.
  2. Включайте strict и tsc --noEmit в CI — рекомендации, Экосистема.
  3. Проектируйте контракты (API, props, domain) отдельно от реализации.
  4. Внешние данные — unknown + проверка, не слепой as.
  5. Учёба — статьи 5-10-typescript; таблицы — 301; индекс — 2.md.

Куда дальше

ЦельМатериал
СамопроверкаЧек-лист
Практикум5.md
React + TS21.md
Node + TS22.md
Паттерны28.md
Шпаргалка2.md, 301