React e TypeScript: Melhores Práticas para 2024

Aprenda as melhores práticas para construir aplicações React com TypeScript, incluindo segurança de tipos, padrões de componentes e otimização de performance.

React e TypeScript: Melhores Práticas para 2024

TypeScript se tornou o padrão de facto para construir aplicações React em larga escala. Neste post, vou compartilhar algumas melhores práticas que aprendi ao longo dos anos.

1. Use Componentes Funcionais com Tipagem Adequada

Sempre type seus componentes funcionais corretamente:

interface ButtonProps {
  label: string;
  onClick: () => void;
  variant?: 'primary' | 'secondary';
}

const Button: React.FC<ButtonProps> = ({ label, onClick, variant = 'primary' }) => {
  return (
    <button onClick={onClick} className={`btn btn-${variant}`}>
      {label}
    </button>
  );
};

2. Aproveite a Inferência de Tipos

TypeScript é inteligente o suficiente para inferir tipos em muitos casos. Deixe-o trabalhar para você:

// Não é necessário type explicitamente o valor de retorno
const getUserName = (user: User) => {
  return user.firstName + ' ' + user.lastName;
};

// TypeScript sabe que isso é uma string[]
const names = users.map(user => user.name);

3. Use Unions Discriminadas para Estado

Este padrão é incrivelmente útil para gerenciar estado complexo:

type LoadingState =
  | { status: 'idle' }
  | { status: 'loading' }
  | { status: 'success'; data: Data }
  | { status: 'error'; error: Error };

const Component: React.FC = () => {
  const [state, setState] = useState<LoadingState>({ status: 'idle' });

  // TypeScript sabe quais propriedades estão disponíveis
  if (state.status === 'success') {
    console.log(state.data); // ✅ data está disponível
  }
};

4. Crie Componentes Genéricos Reutilizáveis

Componentes genéricos podem funcionar com múltiplos tipos mantendo a segurança de tipos:

interface ListProps<T> {
  items: T[];
  renderItem: (item: T) => React.ReactNode;
}

function List<T>({ items, renderItem }: ListProps<T>) {
  return (
    <ul>
      {items.map((item, index) => (
        <li key={index}>{renderItem(item)}</li>
      ))}
    </ul>
  );
}

5. Use as const para Melhor Inferência de Tipos

const COLORS = {
  primary: '#c9f31d',
  dark: '#0a0a0a',
} as const;

type Color = typeof COLORS[keyof typeof COLORS];
// Color é '#c9f31d' | '#0a0a0a'

Conclusão

Essas práticas me ajudaram a escrever aplicações React mais sustentáveis e livres de bugs. O sistema de tipos do TypeScript é poderoso, e quando usado corretamente, pode pegar erros antes que eles cheguem à produção.

Quais são seus padrões favoritos de React + TypeScript? Me conte!

📚 Referências

Tags

#react#typescript#melhores-praticas#javascript