Лайфхаки TypeScript для React-разработчиков

Лайфхаки TypeScript для React-разработчиков

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

1. as const для определения типов хуков 🪝

При создании пользовательских React-хуков вы часто возвращаете кортеж (массив с несколькими разными значениями) и нужно определить точные типы для этих значений. Без as const TypeScript будет выводить более общие типы, например number | boolean[] вместо точных типов.

Без as const вам нужно вручную определять возвращаемый тип хука:

function useStateWithTypes() {
  return [0, false]; // TypeScript выведет это как (number | boolean)[]
}

// Ручное определение типа
function useStateWithTypes(): [number, boolean] {
  return [0, false];
}

Однако с as const TypeScript может автоматически вывести точные типы, делая ваш код чище и безопаснее:

function useStateWithTypes() {
  return [0, false] as const; // TypeScript выводит точный тип кортежа: [0, false]
}

Теперь useStateWithTypes возвращает точно кортеж [number, boolean], что и было задумано.

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

2. Типы шаблонных литералов 🔠

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

Пример:

type ButtonSize = 'small' | 'medium' | 'large';
type ButtonClass = `btn-${ButtonSize}`;
// ButtonClass теперь 'btn-small' | 'btn-medium' | 'btn-large'

Это гарантирует, что строки, такие как имена классов или типы действий, всегда следуют правильному паттерну.

3. useRef с TypeScript ⚙️

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

Пример:

const inputRef = useRef<HTMLInputElement>(null);
// Теперь TypeScript знает, что inputRef имеет тип HTMLInputElement, а не просто 'null | undefined'

Это добавляет уровень безопасности и помогает избежать ошибок при взаимодействии с DOM.

Используя as const, типы шаблонных литералов и правильную типизацию useRef, вы можете гарантировать, что ваш React-код будет безопаснее и проще в поддержке. Эти небольшие изменения могут оказать огромное влияние на ваш опыт работы с TypeScript!

Какие трюки TypeScript вы считаете наиболее полезными в ваших React-проектах? Давайте обсудим в комментариях! 👇