Bilal Gokdag
Blog'a Dön

React ve TypeScript ile 'Clean Code' Yazma Pratikleri

Gelişmiş TypeScript özellikleri (Generics, Utility Types, Discriminated Unions) kullanarak hata payı düşük ve bakımı kolay React bileşenleri mimarisi.

React ve TypeScript ile "Clean Code" Yazma Pratikleri

TypeScript'i sadece any tipinden kaçınmak için bir araç olarak görmek, onun potansiyelini harcamaktır. Kıdemli bir frontend mühendisi olarak, TypeScript'i iş kurallarını (business logic) kod seviyesinde zorlayan katı bir sözleşme aracı olarak kullanmalıyız.

1. "Discriminated Unions" ile Olasılıkları Sınırlandırma

Kompleks arayüzlerde, bileşenlerin alabileceği state'leri (durumları) birbirine karıştırmamak hayati önem taşır.

// ❌ Kötü Kullanım: Birbiriyle çelişen proplara izin verir
interface ButtonProps {
  isLoading?: boolean;
  text?: string;
  icon?: React.ReactNode;
}

// ✅ İyi Kullanım (Discriminated Unions): Güvenli tip tasarımı
type ButtonState =
  | { state: "loading" }
  | { state: "success"; text: string }
  | { state: "error"; errorMsg: string };

type SecureButtonProps = ButtonState & { onClick: () => void };

export function ActionButton(props: SecureButtonProps) {
  if (props.state === "loading") return <Spinner />;
  if (props.state === "error")
    return <span className="text-red-500">{props.errorMsg}</span>;

  return <button onClick={props.onClick}>{props.text}</button>;
}