Geri

TypeScript Readonly Utility Type

`Readonly< T >` utility type, bir objenin tüm alanlarını değiştirilemez (immutable) hale getirir. Bu, verinin yanlışlıkla değiştirilmesini önler ve daha güvenli kod yazmamızı sağlar.

Temel Readonly Kullanımı

type User = {
    id: number;
    name: string;
  };
  
  const user: Readonly<User> = {
    id: 1,
    name: "Alice"
  };
  
  user.name = "Bob"; // Error: Cannot assign to 'name' because it is a read-only property.

`user` objesi `Readonly< User >` olarak tanımlandığında, içindeki alanlar sadece okunabilir olur. Değiştirme girişiminde TypeScript hata verir.

Fonksiyon Parametresinde Kullanımı

type Config = {
    apiUrl: string;
    timeout: number;
  };
  
  function freezeConfig(config: Readonly<Config>) {
    // config.timeout = 5000; // Error!
    console.log("Config is locked:", config);
  }
  
  freezeConfig({ apiUrl: "https://api.example.com", timeout: 3000 });
  // Output: Config is locked: { apiUrl: "https://api.example.com", timeout: 3000 }

Bir yapılandırma (`config`) gibi objelerin fonksiyonda değişmesini istemediğimizde `Readonly` oldukça işe yarar. Kodun niyetini açıkça belirtir.

Pratik Örnek: Todo List

type Todo = {
    title: string;
    completed: boolean;
  };
  
  const todo: Readonly<Todo> = {
    title: "Learn TypeScript",
    completed: false
  };
  
  console.log(todo);
  // Output: { title: "Learn TypeScript", completed: false }

`Readonly< Todo >` tanımıyla bir yapılacak iş (todo) sabitlenmiştir. Bu nesne artık güvenle farklı yerlerde kullanılabilir.

Ne Zaman Kullanılır?

Readonly, özellikle `props`, `config`, `constants` gibi değerlerin istem dışı değişmesini engellemek istediğiniz her yerde kullanılabilir. Ayrıca `freeze` mantığına yakındır ama derleme zamanında çalışır.

Geri