TypeScript для разработчика: типы, проекты и данные
TypeScript для разработчика: моделирование и преобразование типов, generics, satisfies, настройка проектов, JSON Schema и проверка внешних данных через Zod.
Материалы раздела
- JavaScript или TypeScript: что учить первым и как выбрать для проекта — TypeScript добавляет проверку типов к программам JavaScript, но не заменяет знания о выполнении JavaScript. Выбор первого языка удобнее связать с конкретной задачей: научиться…
- Type и interface в TypeScript: отличия и описание данных из JSON — type и interface позволяют назвать форму объекта, но решают не полностью одинаковые задачи. На примере расписания разберём выбор конструкции, объединение деклараций и перевод…
- Литеральные типы и as const: точные значения без лишних аннотаций — Литеральный тип описывает конкретное значение: не произвольную строку, а, например, 'compact'. Такая точность нужна для режима отображения, команды или единицы измерения, но её…
- Any, unknown и never: неизвестные значения и невозможные состояния — any, unknown и never полезно различать по тому, какие действия они разрешают. Первый отключает существенную часть проверки, второй требует доказать возможность операции, а третий…
- Сужение типов: проверки значений, type guards и поток управления — Сужение типа связывает обычную проверку JavaScript с информацией, доступной компилятору в конкретной ветке. Правильная проверка одновременно объясняет поведение программы…
- Union и discriminated union: моделирование вариантов без невозможных сочетаний — Объединение типов описывает значение, которое подходит хотя бы одному из вариантов. Для состояния задачи важна не только допустимость отдельных полей, но и допустимость их…
- Generics в TypeScript: параметры типов, extends и keyof — Generics в TypeScript описывают связь между типами входных данных и результата, не теряя конкретную информацию о значении.
- Utility types: Pick, Omit, Partial и производные модели без копирования полей — Utility types позволяют получить новое описание из уже существующего типа: выбрать поля, исключить служебные свойства, сделать часть данных необязательной или извлечь результат…
- Satisfies в TypeScript: проверка конфигурации с сохранением вывода типов — satisfies проверяет совместимость выражения с выбранным типом, не заменяя его обычной широкой аннотацией. Это особенно удобно для конфигураций: хочется проверить обязательные…
- Mapped types: преобразование ключей и свойств исходной модели — Mapped type строит объектный тип по набору ключей. Такой механизм полезен, когда рядом с исходной моделью нужны ошибки полей, таблица подписей или набор читающих функций, а…
- Условные типы: infer, distributivity и разница между never и [never] — Условный тип выбирает результат по совместимости типов. Самая частая неожиданность возникает не в синтаксисе extends, а в том, проверяется ли объединение целиком или выражение…
- Настройка tsconfig: strict, types и typeRoots без случайных глобальных типов — Конфигурация TypeScript определяет, какие файлы проверяются, какие возможности окружения видны программе и какой JavaScript получается на выходе.
- Paths в TypeScript: почему alias компилируется, но не запускается — Настройка paths помогает TypeScript найти исходный файл по короткому имени импорта. Она не заставляет Node.js понимать такое имя и не переписывает его в выходном JavaScript.
- Project references: сборка связанных TypeScript-проектов через tsc -b — Project references описывает зависимости между отдельными TypeScript-проектами. Компилятор получает граф, по которому может собирать зависимости раньше потребителей и повторно…
- Проверка JSON: форматирование, синтаксис и JSON Schema с Ajv — Красиво отформатированный JSON может содержать неправильные данные, а успешный JSON.parse не подтверждает соответствие интерфейсу TypeScript.
- Runtime-валидация в TypeScript: unknown, Zod и проверенные данные — TypeScript проверяет программу до запуска, но внешний объект не обязан соответствовать нашей аннотации. Runtime-валидация превращает неизвестный вход в понятный результат:…
- Zod discriminatedUnion: проверяем события обучения по признаку kind — События одного потока часто имеют разные наборы полей: начало урока, ответ на вопрос и завершение прохождения.