Type Assertion (tip beyanı) — geliştiricinin TypeScript derleyicisine bir değerin tipinin nasıl algılanması gerektiğini bildirme şeklidir. Söz dizimi:
let someValue: any = "örnek"; let strLen: number = (someValue as string).length;
Type Assertion, verileri çalışma zamanında dönüştürmez, yalnızca derleyiciye bunların tipini belirtir. Eğer assertion hatalıysa — program durmaz, bu da çalışma zamanı hatalarına yol açabilir. C# veya Java'daki "casting" işlemlerinin aksine, TypeScript herhangi bir dönüşüm yapmaz.
Kullanım sırasında, birbirine bağlı olmayan tipler arasında direkt assertion yapılamaz (örneğin, as number as User), ancak as unknown üzerinden dolaylı yollar bulunmaktadır.
value as unknown as Typeile bir değeri başka bir tipe dönüştürmek güvenli midir?
Yanlış Cevap: Evet, bu güvenlidir çünkü birçok TypeScript geliştiricisi böyle yazar.
Doğru Cevap: Hayır, bu tehlikelidir. Bu tür bir yöntem, derleyici kontrollerini geçersiz kılar ve her türü herhangi bir başka türe dönüştürmeye olanak tanır, bu da çalışma zamanı hatalarına yol açabilir. Sadece değerinin gerçekten hedef tip ile uyumlu olduğundan emin olduğunuzda kullanın.
Hikaye
Bir geliştirici, bir üçüncü parti API'den gelen objeye kendi arayüzü (
as MyType) ile Type Assertion yaptı, alanları kontrol etmeden. API yapısını değiştirdi ve uygulama var olmayan anahtarlara erişirken çökme yaşadı.
Hikaye
DOM ile çalışmak için bir kütüphanede birisi, tipine güvenmeden çift assertion
el as unknown as HTMLElementyaptı ve daha sonra başka bir nesnede HTMLElement yöntemlerini çağırmaya çalışırken hata aldı.
Hikaye
JS kodu ile entegrasyonda tip hatalarını çözmeye çalışırken, geliştiricilerden biri yapılandırmaya
as anyuyguladı. Bu, problemi gizledi ve yanlış veri işleme hatası yalnızca üretimde ortaya çıktı.