ProgramlamaTypeScript/Tam Yığın Geliştirici

Conditional Types, TypeScript'te infer ile nasıl çalışır, hangi durumlarda gereklidir ve pratikte karşılaşılan hatalar nelerdir?

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

Cevap.

infer anahtar kelimesi ile birlikte kullanılan Koşullu Türler, karmaşık veri türlerinden türleri çıkarmaya olanak tanır. Klasik bir örnek — bir dizinin eleman türünü çıkarmak:

type ElementType<T> = T extends (infer U)[] ? U : T;

Burada infer U, T dizisinin eleman türünü hesaplamaya olanak tanır. Eğer T bir dizi ise, elemanlarının türü dönecektir, aksi takdirde kendisi T dönecektir.

Nerelerde kullanılır:

  • Genel yardımcı türlerin yazılması için (örneğin, bir fonksiyondan dönen türün, Promise değerinin türünü çıkarma vb.).

Örnek:

type ReturnType<T> = T extends (...args: any[]) => infer R ? R : any;

İpuçlarıyla ilgili bir soru.

Bir koşullu tür içinde birden fazla infer kullanılabilir mi? TypeScript bu durumu nasıl yorumluyor?

Yanlış cevap:

  • "Birden fazla infer kullanmak imkânsız, TypeScript bunu yapmanıza izin vermez."

Doğru cevap:

  • Bir şablon içinde birden fazla infer değişkeni kullanılabilir. Örneğin, bir tuple'ı analiz ederken:
type FirstArgument<T> = T extends (infer F, ...any[]) => any ? F : never; // Ama fonksiyonlarla daha doğru: type Args<T> = T extends (...args: infer A) => any ? A : never;
  • TypeScript, farklı infer değişkenleri aracılığıyla birden fazla türü doğru bir şekilde çıkarır.

Konuyla ilgili bilinmeyen detaylardan kaynaklanan gerçek hata örnekleri.


Hikaye

Bir geliştirici, bir fonksiyonun döndürdüğü nesnenin tipini elde etmek için bir yöntem yazdı, ancak fonksiyonun Promise döndürebileceğini hesaba katmadı. Sonuç olarak, dönen değer tipi daima Promise<any> oldu, çünkü iç içe bir conditional kullanmadı. Kodun tüm veritabanında yeniden yapılandırılması gerekti.


Hikaye

Projede, iç içe dizileri açmak için genel bir tip tanıtıldı, ancak koşulda son bir else-branch belirtilmeyi unuttular. TypeScript doğru bir hata almadı, ancak bazı durumlarda sonuç never oldu, bu da bazı utility tiplerinin dış kütüphanelerde bozulmasına neden oldu.


Hikaye

Bir arkadaş, büyük bir arayüzün özelliklerinin türlerini çıkarma girişiminde bulundu, ancak bazı özelliklerin kendilerinin union türleri olduğunu hesaba katmadı. Sonuç olarak, beklenmedik union türü kombinasyonları çıktı, derleyici bunu geçiştirdi, ancak mantık hatalı çalıştı.