ProgramlamaTypeScript Geliştiricisi

TypeScript'te değişkenlerin tiplerini tanımlamada `typeof` operatörünün rolü ve mekanizmasını açıklayın. Değişkenin veya nesne yapısının tipini çıkarmak için nasıl kullanılır ve hangi durumlarda manuel olarak tipe atamadan daha tercih edilebilir?

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

Cevap.

TypeScript, typeof operatörünü yalnızca çalışma zamanında (JavaScript'te olduğu gibi) değil, aynı zamanda derleme aşamasında da ifade tipini çıkarmak için destekler. Bu, önceden tanımlanmış bir değişkenin, fonksiyonun veya nesne yapısının tipini elde etmeyi sağlar; bu da tip tanımlamasını esnek hale getirir ve türlerin yinelenmesi ve senkronizasyon hatası olasılığını azaltır.

Tarihçesi

Öncelikle, JavaScript’te typeof operatörü, bir değerin türünü çalışma zamanında belirlemek için kullanılıyordu. TypeScript bu mekanizmayı genişletti — şimdi typeof derleme aşamasında bir değişkenin veya bir fonksiyonun sonucunun tipi için bir referans oluşturuyor. Bu, karmaşık yapılar, konfigürasyonlar ile çalışırken ve modüller arasında türleri yeniden kullanırken son derece faydalıdır.

Problem

Manuel tip tanımlamasında hata yapmak kolaydır: yapı tanımını değiştirmek ve type ya da interface tanımını güncellemeyi unutmak veya nesneler arasında türleri yanlış kopyalamak. Bu, kodun senkronizasyonunu bozar ve çalıştırma hatalarına yol açar. typeof kullanıldığında, tip dinamik olarak çıkarılır ve her zaman güncel veri yapısına karşılık gelir.

Çözüm

Zaten var olan bir yapıya veya sabite karşılık gelen bir tip ile değişken tanımlamak için typeof operatörü kullanılır:

const config = { host: "localhost", port: 8080, }; let serverCfg: typeof config; // serverCfg'nin tipi config ile aynı

Belli bir yapı döndüren bir fonksiyonun tipine:

function makeUser() { return { id: 1, name: "Alex" }; } type User = ReturnType<typeof makeUser>; // User: {id: number; name: string;}

Anahtar özellikler:

  • typeof TS'de, bir değişkenin veya ifadenin sonucunun tipini derleme aşamasında döndürür.
  • Yinelemeyi ve türlerin senkronizasyonunu önlemeye yardımcı olur.
  • Genellikle ek yardımcı tiplerle (ReturnType, Parameters) ve keyof ile bir nesnenin anahtarlarının listesini almak için birleştirilir.

Sıkıntılı Sorular.

TypeScript'te typeof operatörü çalışma zamanında mı çalışır?

Hayır, tip typeof yalnızca derleme sırasında çalışır, çalışma zamanı koduna dahil olmaz; ancak JavaScript'ün typeof operatörü çalışma zamanında da mevcuttur.

typeof sınıfın özelliklerinin tipini çıkarmak için kullanılabilir mi?

Evet, ancak yalnızca özellik önceden statik olarak tanımlandıysa veya başlangıç değeri varsa, aksi takdirde hata meydana gelir. Private/public protected — sadece kamu özellikleri/yöntemleri dikkate alınır.

'let x: typeof y;' ve 'let x = y;' arasında bir fark var mı?

Tip açısından — her iki durumda da derleyici otomatik olarak tipi çıkarır. Ancak, 'typeof' tip bildirimi yazarken başlatma olmadan veya yardımcı tiplerle daha karmaşık kombinasyonlar için kullanılabilir.

Tip Hataları ve Anti-Desenler

  • typeof kullanımının alışıldık js tipi kontrolü için typeof x === 'string' kullanılması — bu çalışma zamanı, compilable type değildir.
  • Yapının değerini yeniden kullanmak; yalnızca şekli gerekiyorsa (yapıyı ayrı bir tür haline getirmek daha iyidir).

Gerçek Hayattan Bir Örnek

Negatif Durum

Proje, büyük bir uygulama ayar nesnesini ayrı olarak tip ve değişken olarak tanımlar. Yapıyı değiştirdiğinde, türü güncellemeyi unutur, bu da API hatalarına yol açar.

Artıları: Tiplerin esnek çalışması, type veya interface vasıtasıyla tipleri yeniden tanımlama imkanı.

Eksileri: Yapı ve türlerin senkronizasyonu için büyük risk, zayıf sürdürülebilirlik.

Pozitif Durum

Yeni değişkenler tanımlarken ve API arayüzü için tip üretirken nesne yapısının güncel tipini almak için typeof kullanımı.

Artıları: Tip her zaman değeri ile örtüşüyor, hata olasılığının düşük olması, iyi otomatik tamamlama.

Eksileri: Eğer nesne çok karmaşıksa, sonuç türü yeni başlayanlar için okunması karmaşık hale gelebilir.