Menu
Coddy logo textTech

Opsiyonel ve Readonly Özellikler

Coddy'nin JavaScript Journey'sinin TypeScript'e Giriş bölümünün bir parçası — ders 41 / 73.

TypeScript size bu kontrolü sağlayan iki güçlü değiştirici sunar: isteğe bağlı özellik değiştiricisi (optional property modifier) ve salt okunur değiştiricisi (readonly modifier).

? sembolü bir özelliği isteğe bağlı hale getirir, yani bir nesne oluşturulurken bulunması gerekmez. Bu, her zaman ihtiyaç duyulmayabilecek özellikler için kullanışlıdır:

interface User {
  name: string;
  email?: string;  // İsteğe bağlı özellik
}

let user1: User = { name: "Alice" };  // Geçerli - email isteğe bağlıdır
let user2: User = { name: "Bob", email: "bob@example.com" };  // Bu da geçerli

readonly değiştiricisi, bir özelliğin nesne oluşturulduktan sonra değiştirilmesini engeller. Bu, benzersiz tanımlayıcılar gibi sabit kalması gereken özellikler için mükemmeldir:

interface Product {
  readonly id: number;  // Oluşturulduktan sonra değiştirilemez
  name: string;
}

let product: Product = { id: 1, name: "Laptop" };
product.name = "Gaming Laptop";  // Geçerli
// product.id = 2;  // Hata: 'id' salt okunur olduğu için atama yapılamaz

Her iki belirleyiciyi de aynı arayüz üzerinde birleştirebilirsiniz; bu belirleyiciler hem arayüzler hem de tür takma adları ile aynı şekilde çalışarak nesne yapılarınız üzerinde size hassas bir kontrol sağlar.

challenge icon

Görev

Kolay

Aşağıdaki özelliklere sahip Book adında bir arayüz (interface) oluşturun:

  • string türünde title (zorunlu)
  • string türünde isbn (salt okunur - readonly)
  • string türünde subtitle (isteğe bağlı - optional)
  • number türünde pages (zorunlu)
  • number türünde publishedYear (salt okunur - readonly)
  • string türünde genre (isteğe bağlı - optional)

Aşağıdaki özelliklere sahip Magazine adında bir arayüz (interface) oluşturun:

  • string türünde name (zorunlu)
  • number türünde issueNumber (salt okunur - readonly)
  • string türünde topic (isteğe bağlı - optional)
  • boolean türünde monthlySubscription (zorunlu)

Arayüzlerinizi kullanarak aşağıdaki değişkenleri oluşturun:

  • Book türünde, title değeri "1984", isbn değeri "978-0-452-28423-4", pages değeri 328 ve publishedYear değeri 1949 olan novel adında bir değişken oluşturun
  • Book türünde, title değeri "The Joy of Cooking", isbn değeri "978-0-7432-4626-2", subtitle değeri "All About Baking", pages değeri 1132, publishedYear değeri 2006 ve genre değeri "Cooking" olan cookbook adında bir değişken oluşturun
  • Magazine türünde, name değeri "Tech Today", issueNumber değeri 45 ve monthlySubscription değeri true olan techMag adında bir değişken oluşturun
  • Magazine türünde, name değeri "Science Weekly", issueNumber değeri 12, topic değeri "Climate Change" ve monthlySubscription değeri false olan scienceMag adında bir değişken oluşturun

Book türünde bir parametre kabul eden ve string döndüren getBookDetails adında bir fonksiyon oluşturun. Fonksiyon, kitabın başlığını ve sayfa sayısını "[title] - [pages] pages" formatında döndürmelidir.

Magazine türünde bir parametre kabul eden ve string döndüren getMagazineInfo adında bir fonksiyon oluşturun. Fonksiyon, derginin adını ve sayı numarasını "[name] Issue #[issueNumber]" formatında döndürmelidir.

Aşağıdaki çıktıları ayrı satırlara yazdırın:

  • novel ile getBookDetails fonksiyonunu çağırın ve sonucu yazdırın
  • cookbook ile getBookDetails fonksiyonunu çağırın ve sonucu yazdırın
  • techMag ile getMagazineInfo fonksiyonunu çağırın ve sonucu yazdırın
  • scienceMag ile getMagazineInfo fonksiyonunu çağırın ve sonucu yazdırın
  • novel değişkeninin ISBN değerini yazdırın
  • techMag değişkeninin abonelik durumunu (monthlySubscription özelliği) yazdırın

Kendin dene

// YAPILACAK: Kodunuzu buraya yazın

// Book arayüzünü oluşturun

// Magazine arayüzünü oluşturun

// Arayüzlerinizi kullanarak değişkenleri oluşturun

// getBookDetails fonksiyonunu oluşturun

// getMagazineInfo fonksiyonunu oluşturun

// Gerekli çıktıları yazdırın
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

TypeScript'e Giriş bölümündeki tüm dersler