Этап 10 из 12 · ≈ 4 ч

React с TypeScript

Основа с Junior

Типизация props, событий, хуков и контекста.

type ButtonProps = {
  variant?: "primary" | "ghost";
  onClick: (e: React.MouseEvent<HTMLButtonElement>) => void;
  children: React.ReactNode;
} & React.ComponentProps<"button">;

function Button({ variant = "primary", ...rest }: ButtonProps) {
  return <button className={variant} {...rest} />;
}

const [user, setUser] = useState<User | null>(null);

Что важно знать

  • Props — через type или interface; React.FC не обязателен.
  • React.ReactNode для children, React.ComponentProps<"input"> — унаследовать атрибуты нативного элемента.
  • Состояние, которое начинается с null, — явный тип в useState.
  • Типы событий: React.ChangeEvent<HTMLInputElement>, React.FormEvent.
  • Контекст без значения по умолчанию — свой хук с проверкой, что провайдер есть.
  • Дженерик-компоненты: function List<T>({ items, render }: …).

Критерии освоения

Junior ≈ 4 ч

  • Типизирует props, состояние и события в React-компонентах

Практика. Перевести React-проект на TypeScript в режиме strict.

Middle ≈ 4 ч

  • Пишет дженерик-компоненты и типизирует контекст с проверкой провайдера

Практика. Сделать типизированный дженерик-компонент таблицы с колонками и сортировкой.

Проверка знаний

Войдите, чтобы пройти тест: сданный тест отмечает тему пройденной на карте и в ИПР.

Вопросы с собеседований

Смотреть все
Как типизировать props и состояние React-компонента в TypeScript?Junior

Props описывают типом или интерфейсом и указывают в параметре: function Button({ label, onClick }: ButtonProps). Необязательные — ?, значения по умолчанию — в деструктуризации. children — React.ReactNode. Колбэки — сигнатурой: onSelect: (id: string) => void…

Полный разбор
Как типизировать обработчики событий в React с TypeScript?Junior

События React имеют типы с параметром элемента: ChangeEvent&lt;HTMLInputElement&gt;, MouseEvent&lt;HTMLButtonElement&gt;, FormEvent&lt;HTMLFormElement&gt;, KeyboardEvent. Если обработчик написан инлайн в JSX, тип выводится сам. Для вынесенного обработчика …

Полный разбор
Как написать дженерик-компонент и типизировать контекст с проверкой провайдера?Middle

Дженерик-компонент получает параметр типа из данных: function List<T>({ items, render }: { items: T[]; render: (item: T) => ReactNode }) — внутри render тип элемента известен без приведений. Ограничение — T extends { id: string }, если нужен ключ. Контекст…

Полный разбор
Зачем нужен TypeScript и чем any отличается от unknown?Junior

TypeScript добавляет к JavaScript статические типы, которые проверяются при компиляции и стираются в итоговом JS. Польза: ошибки до запуска, автодополнение, безопасный рефакторинг, типы как документация. any отключает проверку; unknown — «что угодно», но…

Полный разбор
Чем interface отличается от type в TypeScript и что такое утилитарные типы?Junior

Оба описывают форму объекта. interface — расширяется через extends и сливается при повторном объявлении (удобно для расширения чужих типов). type — умеет больше: объединения, пересечения, кортежи, условные и сопоставленные типы. Утилиты строят новые типы из…

Полный разбор
Что такое сужение типов в TypeScript?Junior

Если переменная имеет тип-объединение (string | number, User | null), TypeScript позволяет использовать только общее. Проверка внутри кода сужает тип в ветке: typeof (примитивы), instanceof (классы), in (наличие свойства), сравнение с null, дискриминант…

Полный разбор
Чем state отличается от props в React?Junior

props — входные данные от родителя, компонент их только читает. state — собственные данные компонента, меняются через setState и вызывают перерисовку. Данные текут сверху вниз; ребёнок сообщает об изменениях родителю через колбэки в props. Общее состояние…

Полный разбор

Документация

← Вся карта «React»

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования