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