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-функции. В catch — unknown. → Асинхронность.
Вопрос. 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.
Главные выводы раздела
- TypeScript добавляет статическую проверку к JavaScript; в runtime выполняется JS.
- Включайте
strictиtsc --noEmitв CI — рекомендации, Экосистема. - Проектируйте контракты (API, props, domain) отдельно от реализации.
- Внешние данные —
unknown+ проверка, не слепойas. - Учёба — статьи 5-10-typescript; таблицы — 301; индекс — 2.md.
Куда дальше
| Цель | Материал |
|---|---|
| Самопроверка | Чек-лист |
| Практикум | 5.md |
| React + TS | 21.md |
| Node + TS | 22.md |
| Паттерны | 28.md |
| Шпаргалка | 2.md, 301 |