ProgramlamaFrontend geliştirici

TypeScript'te 'Type Assertion' mekanizmasını açıklayın. Diğer dillerdeki tip dönüşümünden farkı nedir ve yanlış kullanımı neye yol açabilir?

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap

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.

Çelişkili Soru

value as unknown as Type ile 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.

Konunun inceliklerini bilmemekten kaynaklanan gerçek hata örnekleri


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 HTMLElement yaptı 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 any uyguladı. Bu, problemi gizledi ve yanlış veri işleme hatası yalnızca üretimde ortaya çıktı.