javascript - Neden dom ve dom.iterable ayrı?
tsconfig.json içinde, HTML veya DOM “kütüphaneleri” için size tip bilgisi sağlayan ek kütüphaneleri tanımlayabilirsiniz (? Doğru terimi bilmiyorum).
dom ve dom.iterable'in neden ayrı olduğunu anlamıyorum. Farklı ECMAScript modüllerinde/sürümlerinde mi tanımlandılar? Bunları güvenle kullanabilir miyim?
Cevap #1
Bence bunun nedeni, yineleme (iterables ve iterators) kavramlarının TypeScript oldukça yerleşik bir hale geldikten çok sonra, ES2015'te JavaScript'e eklenmiş olması. ES2015 yayınlandığında, birçok tarayıcıdaki JavaScript motorları henüz yinelemeyi desteklemiyordu¹ ve tabii ki o dönemde Internet Explorer hâlâ yeni özellikler alması mümkün olmayan bir durumdaydı. Bu yüzden bazı projeler yinelemeyi desteklemeyen ortamlara hedef almak zorundaydı, bu yüzden kütüphaneler ayrı tutuldu.
Hatta 2022'de bile, IE kurumsal ve devlet kurulumlarında hayatta kalıyor (neyse ki bu nihayet değişiyor) ve bazı kişiler uygulamalarını ve sayfalarını bu ortamlara hedeflemek zorunda, bu yüzden dom.iterable kullanmak istemeyebilirler.
¹ ES2015, alanda zaten uygulamaları olmayan önemli özellikleri içeren son spesifikasyon sürümüdür. Günümüzde TC39'un izlediği süreç genellikle, bir özelliğin spesifikasyona eklenmeden önce alanda (ideally) birkaç uygulamasının bulunmasını gerektirir. Bunun yerine, teklif, bu gerçekleşene kadar Stage 3'te kalır, ardından bir TC39 toplantısında oy birliğiyle Stage 4'e taşınır, editörün taslağına eklenir ve böylece bir sonraki Haziran'daki anlık spesifikasyonda yer alır.
Cevap #2
Bence bahsetmeye değer. Ve buraya gelebilecek bazı kişiler için. Ve diğer lib seçenekleriyle ilgili bazı açıklamalar getirmek için. Çünkü aynı ayrım konsepti uygulanmıyor.
Özgeçmiş :
dom,dom.iterableayrıdır. Diğer kütüphaneler dâhildir.es2022, tüm diğeres2022.*varyantlarını içerir (tam olarak hariç.es2022.fulles2022 + diğerleri'ni içerir).
dom ve dom.yinelenebilir
dom, dom.iterablei içermez. İşte nedeni:
Ve burada örneğin gösterilebileceği gibi [lib.dom.iterable.d.ts#L37, lib.dom.d.ts#L2726]:
İterable'in dom kütüphanesini genişlettiğini ve iterable uygulamasını eklediğini görebilirsiniz.
Diğer kütüphaneler hakkında ne düşünüyorsun
es2022, es2022.array, ....
Aynı kavram geçerli değil. es2022, burada gösterildiği gibi diğer tümünü içerir:
lib.es2022.d.ts
yorumları çıkarılmış es2022 dosyası
/// <reference no-default-lib="true"/>
/// <reference lib="es2021" />
/// <reference lib="es2022.array" />
/// <reference lib="es2022.error" />
/// <reference lib="es2022.intl" />
/// <reference lib="es2022.object" />
/// <reference lib="es2022.sharedmemory" />
/// <reference lib="es2022.string" />
Ve tam sürüm (es2022.full) daha da fazlasını yapıyor:
lib.es2022.full.d.ts
Bu, dom, dom.iterable ve daha fazlasını bile içerir. Yani tam sürümü kullanıyorsanız, dom veya dom.iterable eklemenize gerek yoktur.
/// <reference no-default-lib="true"/>
/// <reference lib="es2022" />
/// <reference lib="dom" />
/// <reference lib="webworker.importscripts" />
/// <reference lib="scripthost" />
/// <reference lib="dom.iterable" />
