Найти в Дзене
PurpleSchool

Руководство по TypeScript в React

Современная frontend-разработка ставит перед разработчиками сложные задачи, требующие высокой эффективности и надежности создаваемого кода. В этом контексте TypeScript, как надстройка над JavaScript, добавляющая статическую типизацию, становится ключевым инструментом для решения этих проблем. Он позволяет выявлять потенциальные ошибки еще на этапе разработки, улучшает читаемость кода и облегчает рефакторинг. Особенно важную роль TypeScript играет в разработке React-приложений, где компоненты и хуки образуют сложную экосистему, требующую четкого определения типов. В этой статье мы подробно рассмотрим преимущества использования TypeScript в React-разработке, акцентируя внимание на типизации компонентов, хуков и обработке событий. В конце статьи я также оставил вам блок бесплатных материалов для обучения разработке. Хук useState предоставляет простой способ добавления локального состояния в функциональные компоненты. В TypeScript, мы можем улучшить надежность и понимание кода, используя я
Оглавление

Современная frontend-разработка ставит перед разработчиками сложные задачи, требующие высокой эффективности и надежности создаваемого кода. В этом контексте TypeScript, как надстройка над JavaScript, добавляющая статическую типизацию, становится ключевым инструментом для решения этих проблем. Он позволяет выявлять потенциальные ошибки еще на этапе разработки, улучшает читаемость кода и облегчает рефакторинг. Особенно важную роль TypeScript играет в разработке React-приложений, где компоненты и хуки образуют сложную экосистему, требующую четкого определения типов. В этой статье мы подробно рассмотрим преимущества использования TypeScript в React-разработке, акцентируя внимание на типизации компонентов, хуков и обработке событий. В конце статьи я также оставил вам блок бесплатных материалов для обучения разработке.

Типизация хуков

userState()

Хук useState предоставляет простой способ добавления локального состояния в функциональные компоненты. В TypeScript, мы можем улучшить надежность и понимание кода, используя явную типизацию для useState.

Пример типизации использования useState:

-2

Единственное нужно помнить, что несмотря на уточнение типа, при отсутствии initialState, состояние будет принадлежать к объединению T | undefined.

useEffect() и useLayoutEffect()

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

useContext()

Чтобы использовать useContext в TypeScript, сначала нужно создать объект context с параметром generic type, который задает тип значения контекста.

Вот пример того, как это сделать:

-3

В этом примере мы создали объект контекста ThemeContext, который хранит объект Theme со свойствами color и background. Функция createContext принимает в качестве аргумента значение по умолчанию, которое будет использоваться, если значение контекста не предоставлено родительским компонентом.

Создав объект контекста, вы можете использовать хук useContext для использования значения контекста в компоненте функции. Вот пример того, как это сделать:

-4

Чтобы предоставить значение контекста компоненту функции, можно использовать компонент Context.Provider. Этот компонент принимает значение prop, которое является значением, предоставляемым всем компонентам, потребляющим контекст. Вот пример использования Context.Provider:

-5

В этом примере мы импортировали объект ThemeContext и создали объект темы с белым цветом текста и черным фоном. Затем мы обернули наш MyComponent в компонент ThemeContext.Provider и передали объект темы в качестве значения prop. Это сделает объект темы доступным для всех компонентов, которые используют ThemeContext.

TypeScript и React вместе образуют мощный тандем для разработки надежных и масштабируемых веб-приложений. Однако, чтобы максимально эффективно использовать TypeScript в React, необходимо хорошо понимать как основы TypeScript, так и особенности React, включая компоненты, пропсы и состояние. Если вы хотите детальнее погрузиться в TypeScript и React — приходите на наш большой курс TypeScript с нуля. На курсе 192 урока и 17 упражнений, AI-тренажеры для безлимитной практики с кодом и задачами 24/7, решение задач с живым ревью наставника, еженедельные встречи с менторами.

Типизация компонентов

Типизация пропсов компонента

В React компоненты принимают данные через пропсы и могут иметь внутренний стейт. Использование TypeScript позволяет нам явно определить ожидаемые типы данных, что улучшает понимание и предотвращает ошибки на этапе разработки.

Рассмотрим пример функционального компонента:

-6

В этом примере мы определяем интерфейс MyComponentProps для пропсов, указывая, что они должны содержать name (строка) и age (число).

Типизация самого компонента

Давайте типизируем компонент CustomInput с использованием InputHTMLAttributes<HTMLInputElement> для автоматического включения всех стандартных атрибутов инпута:

-7

В этом примере:

  • React.FC<InputHTMLAttributes<HTMLInputElement>> это функциональный компонент, типизированный с использованием InputHTMLAttributes<HTMLInputElement>, что позволяет автоматически включить все стандартные атрибуты <input>.
  • InputHTMLAttributes предоставляет обобщенный тип для HTML-атрибутов элемента <input>. Путем передачи этого типа в React.FC мы обеспечиваем правильную типизацию и автоматическое включение всех стандартных атрибутов.
  • {...inputProps} спред оператор используется для передачи всех стандартных атрибутов <input> в компонент. Это позволяет избежать явного перечисления каждого атрибута, делая компонент более гибким и легко поддерживаемым.

Теперь, при использовании CustomInput, любые стандартные атрибуты <input>, переданные через пропсы, будут автоматически включены в рендер компонента.

Типизация event

Давайте разберем типизацию для параметра event в функции handleChange:

-8

React.ChangeEvent<HTMLInputElement> - это обобщенный тип, предоставляемый React, который представляет событие изменения для элемента <input>. В данном случае, мы явно указываем, что событие event относится к элементу <input>.

Давайте взглянем на другой пример:

-9

React.MouseEvent<HTMLButtonElement> - это обобщенный тип события, предоставляемый React. Мы указываем, что это событие относится к элементу <button>. C использованием этой типизации TypeScript будет уведомлять вас о доступных свойствах и методах объекта event, специфичных для события клика по кнопке.

Заключение

В целом, использование TypeScript в React повышает структурированность и надежность приложений, делая их более масштабируемыми, легкими в сопровождении и устойчивыми к изменениям. Внедрение этого мощного инструмента в ваш процесс разработки позволяет создавать более надежные и безопасные React-приложения.

Когда вы разберетесь с TypeScript в React, вам будет интересно узнать, как использовать продвинутые возможности TypeScript, такие как generics и условные типы, для создания более гибких и переиспользуемых React-компонентов. Чтобы уверенно применять все эти знания на практике, рассмотрите возможность изучения TypeScript с нуля. В первых 3 модулях уже доступно бесплатное содержание — начните погружаться в TypeScript прямо сегодня.

Бесплатные полезности

1. Смотрите видео: код-ревью, собеседования и новости разработки на нашем Дзене – https://dzen.ru/purpleschool?tab=longs

2. Создайте личный план обучения и получите доступ к базе из 500+ бесплатных уроков в бесплатных картах развития на нашем сайте – https://purpleschool.ru/skills

3. Разберитесь в том, как устроен мир IT на бесплатном курсе «Основы разработки» – https://purpleschool.ru/course/code-basics