CodeBlanks Logo Icon CodeBlanks

Definite assignment

definite assignment ile başlatmayı öğrenirsin.

Definite assignment

Bir sınıf özelliği bildirildiği ama constructor'da atanmadığı durumda TypeScript hata verir. ! işareti ile definite assignment assertion yapılır: özellik türünden sonra ! konur ve TypeScript'e "bu özellik daha sonra atanacak" denir.

class Config {
  host!: string;  // definite assignment assertion
  
  load() {
    this.host = "localhost";
  }
}

Constructor vs definite assignment

Bir özelliği constructor'da atamak en güvenli yoldur; TypeScript tüm özelliklerin atandığını kontrol eder. Ancak bazı durumlarda (örneğin ORM veya framework yüklemesinde) atama sonra olur; o zaman ! ile definite assignment assertion kullanılır.

class User {
  name: string;  // constructor'da atanıyor
  
  constructor(name: string) {
    this.name = name;
  }
}

class Entity {
  id!: number;  // framework tarafından atanacak
  
  save() {
    console.log(this.id);
  }
}

Uygulama Definite assignment ile Config sınıfı

Config sınıfını tanımla: host!: string ve port!: number özellikleri (definite assignment ile). load() yöntemi yaz: this.host = "localhost" ve this.port = 8080 ata. Bir Config örneği oluştur, load() çağır, sonra console.log(c.host) ve console.log(c.port) ile sonuçları yazdır.

Başlangıç kodu

index.ts
// Config sınıfını tanımla (host ve port definite assignment ile)

// load yöntemiyle host ve port ata

// Config örneği oluştur, load çağır, sonuçları yazdır

Örnek çözüm

index.ts
class Config {
  host!: string;
  port!: number;

  load(): void {
    this.host = "localhost";
    this.port = 8080;
  }
}

const c = new Config();
c.load();
console.log(c.host);
console.log(c.port);

Beklenen çıktı

localhost
8080

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Sınıf özelliğinde ! işareti neyi belirtir?

  • Özelliğin opsiyonel olduğunu
  • Özelliğin private olduğunu
  • Özelliğin readonly olduğunu
  • Özelliğin daha sonra atanacağını Doğru cevap

Açıklama: özellik adından sonra ! işareti definite assignment assertion yapar; TypeScript bu özelliğin constructor dışında sonra atanacağına güvener.

2 definite assignment assertion

Soru
class Config {
  host____: string;
  
  load() {
    this.host = "localhost";
  }
}
Cevap
class Config {
  host!: string;
  
  load() {
    this.host = "localhost";
  }
}

Açıklama: ! işareti özellik adından sonra konur ve definite assignment assertion yapar; TypeScript'e özelliğin daha sonra atanacağını söyler.

3 Definite assignment parçaları

Kavram Anlamı
host!: string definite assignment assertion
constructor'da atama en güvenli yol
framework yüklemesi sonra atama için !
! işareti özellik adından sonra

İleri seviye bölümündeki tüm dersler