Definite assignment
- TypeScript kursu
- İleri seviye
- Ders 46/57
- 4 dk
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
// 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
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
class Config {
host____: string;
load() {
this.host = "localhost";
}
}
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 |