Çift İddialar ve Riskleri
as unknown as T ifadesinin ne zaman gerekli olduğunu ve neden tehlikeli olduğunu öğrenin.
Çift İddialar ve Riskleri, CoddyKit'te ücretsiz bir TypeScript Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, TypeScript Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. TypeScript Academy kursu toplamda 4 dersten oluşur.
Çift Tür İddiası Nedir?
Çift tür iddiası, genellikle unknown üzerinden iki as tür dönüştürmesini zincirler: value as unknown as T. Derleyicinin aksi durumda reddedeceği bir dönüşümü zorla kabul ettirir.
const s = 'hello';
const n = s as unknown as number; // forced
console.log(typeof n); // still 'string' at runtime!TS Doğrudan Tür Dönüştürmelerini Neden Engeller
string ile number kesişmediğinde TypeScript, s as number ifadesini engeller; çünkü bu neredeyse kesinlikle bir hatadır. Bu hata, sizi anlamsız tür iddialarından korur.
const s = 'text';
// const n = s as number; // Error: types do not sufficiently overlap
console.log('Direct unrelated assertion is rejected');unknown Tür Dönüştürmesini Nasıl Mümkün Kılar
Her tür unknown türüne atanabilir ve unknown türü her şeye dönüştürülebilir. Değeri bunun üzerinden yönlendirmek, kesişim kuralını iki adımda karşılar ve güvenlik denetimini tamamen atlar.
const s = 'text';
const step1 = s as unknown; // always allowed
const step2 = step1 as number; // allowed from unknown
console.log(typeof step2);Çift Tür İddiası Derleyiciyi Yanıltır
Sonuç derlenir, ancak çalışma zamanındaki değer değişmez. Tür sistemine yanlış bir şey söylemiş olursunuz. Daha sonra iddia edilen türe güvenen herhangi bir kod öngörülemeyen biçimde bozulabilir.
const fake = 'oops' as unknown as number;
console.log(fake + 1); // 'oops1' — string concatenation at runtimeGerçekçi Bir Hatalı Kullanım
Geliştiriciler, şekiller eşleşmediğinde hataları susturmak için bazen çift tür iddiası kullanır. Bu, gerçek hataları gizler: değer aslında iddia edilen özelliklere hiçbir zaman sahip olmamıştır.
type User = { id: number; name: string };
const partial = { id: 1 };
const user = partial as unknown as User;
console.log(user.name); // undefined at runtimeÇift Tür İddiası Ne Zaman Gereklidir
Bazen meşrudur; örneğin çalışma zamanında yapısal olarak uyumlu olduğunu bildiğiniz uyumsuz kitaplık türleri arasında köprü kurarken veya bellek yerleşimini gerçekten bildiğiniz düşük düzeyli kodda kullanılabilir. Bu durumlar nadirdir.
// Bridging a known-compatible external type:
type LibA = { value: number };
type LibB = { value: number };
const a: LibA = { value: 5 };
const b = a as unknown as LibB; // structurally identical
console.log(b.value);Neden Kod Kokusu Sayılır
Çift tür iddiası, tür sistemiyle birlikte çalışmak yerine onu geçersiz kıldığınızı gösterir. Her biri, derleyicinin artık sizi koruyamayacağı bir noktadır; bu nedenle inceleyenler her kullanımı dikkatle değerlendirmelidir.
// Treat 'as unknown as' as a red flag in code review.
const data: unknown = JSON.parse('{}');
// Better: validate with a type guard instead of forcing.
console.log('Prefer validation over double assertion');Doğrulamayı Tercih Edin
Bir türü zorla belirtmek yerine verileri doğrulayın ve türünü daraltın. Tür koruyucusu, yapıyı çalışma zamanında kanıtlar ve derleyiciyi yanıltmadan aynı tür bilgisine sahip sonucu elde etmenizi sağlar.
type User = { id: number; name: string };
function isUser(v: unknown): v is User {
return typeof v === 'object' && v !== null &&
'id' in v && 'name' in v;
}
const raw: unknown = { id: 1, name: 'Sam' };
if (isUser(raw)) console.log(raw.name);Uygun Dönüştürmeyi Tercih Edin
Gerçekten farklı bir çalışma zamanı türüne ihtiyacınız varsa, tür iddiasında bulunmak yerine değeri dönüştürün. Dönüştürme veriyi değiştirir; tür iddiası yalnızca etiketi değiştirir.
const s = '42';
const n = Number(s); // real conversion
console.log(n + 1, typeof n);Nadir Geçerli Durumu Belgeleyin
Çift tür iddiası gerçekten gerekliyse neden güvenli olduğunu açıklayan bir yorum ekleyin. Gelecekte kodu sürdürecek kişilerin, bu tür dönüştürmesini geçerli kılan çalışma zamanı güvencesini bilmesi gerekir.
type Raw = { ts: number };
type Event = { ts: number };
const raw: Raw = { ts: 100 };
// Safe: Raw and Event are structurally identical.
const ev = raw as unknown as Event;
console.log(ev.ts);Kılavuz Özeti
Temel kural: as unknown as yazıyorsanız durup doğrulama veya dönüştürmenin daha güvenli olup olmadığını sorun. On durumun dokuzunda daha güvenli olan seçenek bunlardan biri olacaktır.
// Decision: validate? convert? or genuinely bridge identical types?
const input = '7';
const parsed = Number.parseInt(input, 10); // convert, don't force
console.log(parsed);Kısa Sınama
Çift tür iddialarını anlayışınızı sınayın.
Özet: Çift Tür İddiaları
Şunları öğrendiniz:
value as unknown as T, TypeScript'in aksi durumda reddedeceği bir tür dönüştürmesini zorlar.- Bu,
unknowntürünün her türle kesişmesi sayesinde çalışır; ancak çalışma zamanında hiçbir şeyi değiştirmez. - Bu bir kod kokusudur: tür sistemini geçersiz kılar ve onun korumasını kaybedersiniz.
- Bunun yerine doğrulamayı (tür koruyucularını) veya gerçek dönüştürmeyi tercih edin.
Sırada, tür iddiaları ile tür koruyucularının karşılaştırması var.
// Validate, don't force:
const raw: unknown = '99';
const n = typeof raw === 'string' ? Number(raw) : 0;
console.log(n);Sıkça Sorulan Sorular
“Çift İddialar ve Riskleri” dersi ücretsiz mi?
Evet — “Çift İddialar ve Riskleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve TypeScript Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. TypeScript Academy kursu toplamda 4 dersten oluşur.
“Çift İddialar ve Riskleri” dersinde ne öğreneceğim?
as unknown as T ifadesinin ne zaman gerekli olduğunu ve neden tehlikeli olduğunu öğrenin. TypeScript Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
TypeScript Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te TypeScript Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“Çift İddialar ve Riskleri” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu TypeScript Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her TypeScript Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Tür İddiaları için as Anahtar Sözcüğü
- Null Olmama İddiası İşleci
- Çift İddialar ve Riskleri
- İddialar ve Tür Koruyucuları