Soru Tarihi
JavaScript'te typeof operatörü, çalıştırma sırasında ilkel değerlerin türünü kontrol etmek için kullanılır. TypeScript, bu mekanizmayı genişleterek, tür korumaları (type guards) aracılığıyla tür daraltma (type narrowing) sisteminin bir parçası haline getirir. TypeScript, typeof operatörünün sonucunu, kod bloğu içindeki bir değişkenin türünü netleştirmek için kullanır, bu da özellikle union türleri ile çalışırken fonksiyonun mantığını daha doğru bir şekilde tanımlamayı sağlar.
Sorun
Normal JavaScript'te, typeof ile bir değer türü kontrol edildikten sonra tür garantisi olamaz — programcı, kodun hangi bölümünde ne olduğunu hatırlamak zorundadır. Ancak, TypeScript'te durum, farklı türlerin ve union türlerinin bulunmasıyla karmaşıklaşır ve doğru tür daraltması olmadan kolayca hata yapılabilir; örneğin, var olmayan bir metoda erişmeye çalışmak. Ayrıca, operatörün belirli sınırlamaları vardır: yalnızca temel ilkel türleri "görebilir"; örneğin, diziler ve nesneler için 'object' döner.
Çözüm
TypeScript, typeof operatörünü kendi tür analizi ile birleştirerek bir değişkenin türünü kod bloğu içinde daraltmaya imkan tanır. Bu, güvenliği otomatik olarak artırır — derleyici, kodun hangi türle çalıştığını bilir ve olası özellikleri ve metodları önerir.
Kod örneği:
function printId(id: number | string) { if (typeof id === 'string') { // Bu dalda id: string console.log(id.toUpperCase()); } else { // Bu dalda id: number console.log(id.toFixed(2)); } }
Ana özellikler:
typeof operatörü bir diziyi tanıyabilir mi?
Hayır, bir dizi ve nesne için typeof aynı değeri dönecektir — 'object'. Dizileri ayırt etmek için Array.isArray() metodunu kullanmak daha iyidir.
Kod örneği:
const arr = [1, 2, 3]; console.log(typeof arr); // 'object' console.log(Array.isArray(arr)); // true
typeof ile null ve nesneyi ayırt edebilir miyiz?
Hayır, typeof null 'object' döner, bu JavaScript'in tarihsel bir özelliğidir.
Kod örneği:
console.log(typeof null); // 'object'
typeof ile özel bir sınıfı kontrol edebilir miyiz?
Hayır, sınıf örnekleri için typeof de 'object' dönecektir. Bunun için instanceof operatörü veya özel tür koruma (type guard) fonksiyonları kullanılır.
Kod örneği:
class User {} const u = new User(); console.log(typeof u); // 'object' console.log(u instanceof User); // true
typeof kullanımı.instanceof ve Array.isArray() kullanmaktan kaçınma.Programcı, bir değerin dizi olup olmadığını typeof ile kontrol etmeye çalıştığı bir fonksiyon yazdı ve sonucu temel alarak farklı yöntemler çağırdı.
Artıları:
Eksileri:
Array.isArray kullanımı ve tür koruma ile birleştirilmesi.
Artıları:
Eksileri: