Bir adlandırma çakışması, iki veya daha fazla kod bileşeni bir değişken, işlev veya sınıf için aynı adı kullandığında meydana gelir. Birçok kişinin aynı kod tabanında çalıştığı büyük projelerde yaygındır. Hatalardan hangi kod bileşeninin sorumlu olduğunu belirlemeyi zorlaştırabilirler.
Ad alanlarını kullanarak, ilgili bileşen gruplarının ortak bir tanımlayıcı altında olması için kodunuzu düzenleyebilir ve yönetebilirsiniz. Bu, adlandırma çakışmaları riskini azaltacaktır.
Ad Alanı Oluşturma
Kullanarak TypeScript'te ad alanları oluşturabilirsiniz. ad alanı anahtar kelime. Ad alanını ve kıvrık ayraçlarla çevrili bir bloğu adlandırmak için bir tanımlayıcı ile takip edin. Sözdizimi, kullandığınıza benzer JavaScript'te bir sınıf oluşturun.
Örneğin:
ad alanı Örnek {}
Ardından, ad alanı bloğu içinde değişkenler, işlevler ve sınıflar gibi ad alanının üyelerini bildirebilirsiniz:
ad alanı Örnek {
ihracatişlevfoo(): geçersiz{
konsol.kayıt("Bu, Örnek ad alanı içindeki bir işlevdir");
}ihracatsınıf Çubuk {
mülk: sicim;inşaatçı(mülk: sicim) {
Bu.özellik = özellik;
}
}
ihracatsabit baz = "Bu bir ad alanı değişkenidir"
}
Yukarıdaki örnekte, foo, Çubuk, Ve baz üyeleri Örnek ad alanı. Varsayılan olarak, yalnızca aynı ad alanının içindeki bir ad alanının üyelerine erişebilirsiniz. Kullan ihracat ad alanının her üyesini onun dışında erişilebilir kılmak için anahtar sözcük.
Nokta gösterimini kullanarak ad alanının üye adını çağırarak, bir ad alanının herkese açık tüm üyelerine erişebilirsiniz:
Örnek.foo(); // Bu, Örnek ad alanı içindeki bir işlevdir
sabit çubuk = yeni Örnek. Çubuk("sicim");
konsol.log (bar.özellik); // sicim
konsol.log (Örnek.baz); // Bu bir ad alanı değişkenidir
İç İçe Ad Alanları
TypeScript, kodunuz için hiyerarşik bir yapı oluşturmak üzere ad alanlarını diğer ad alanlarının içine yerleştirmenize olanak tanır. Ad alanlarını iç içe yerleştirmek, ilgili ad alanlarını ortak bir tanımlayıcı altında gruplandırarak adlandırma çakışmalarının risklerini daha da azaltabilir.
Örneğin:
ad alanı Örnek {
ihracatsabit özellik_1 = "foo";ihracatad alanı Çubuk {
ihracatsabit yazdırFoo = işlev () {
konsol.log (özellik_1);
};
}ihracatad alanı Baz {
ihracatsınıf {
mülk: sicim;
inşaatçı(mülk: sicim) {
Bu.özellik = özellik;
}
}
}
}
Yukarıdaki kod bloğu, iç içe geçmiş bir ad alanı örneği sağlar. bu Örnek ad alanı, şunları içeren üst düzey ad alanıdır: Çubuk ad alanı ve Baz ad alanı.
İç içe geçmiş bir ad alanındaki özelliklere, oluşturduğunuz hiyerarşik yapıyı izleyen nokta gösterimini kullanarak erişebilirsiniz.
Örneğin:
konsol.log (Örnek.özellik_1); // Foo
Örnek. Bar.printFoo() // Foo
sabit foo = yeni Örnek. Baz. foo("örnek")
Bu örnek kod, ad alanının her üyesine üst ad alanı aracılığıyla erişir. Bir özelliğe üst ad alanı yerine doğrudan erişmek hata verir:
Örnek.printFoo()
// hata TS2339: 'printFoo' özelliği, 'typeof Example' türünde mevcut değil
Ad alanlarını iç içe yerleştirmek, kodunuzu düzenlemenize yardımcı olsa da derinden iç içe geçmiş ad alanları tam tersi bir etki yaratabilir. Derinlemesine iç içe geçmiş ad alanları, kodunuzun okunmasını ve bakımını zorlaştırır.
Ad Alanı Takma Adları
Bir ad alanı diğer adı, bir ad alanı üyesine verilen kısaltılmış bir addır ve bu, referans almayı kolaylaştırır.
kullanarak bir ad alanı takma adı oluşturabilirsiniz. içe aktarmak anahtar kelime ve ardından takma ada atamak istediğiniz ad. Ardından, atayın içe aktarmak bir ad alanı üyesine anahtar sözcük ve takma ad.
Örneğin:
ad alanı Araba {
ihracatad alanı tesla {
ihracatsınıf ModeliX {
yaratmak(): Sicim {
geri dönmek"X Modeli Oluşturuldu"
}
}
}ihracatad alanı toyota {
ihracatsınıf {}
}ihracatad alanı ford {
ihracatsınıf {}
}
}// Takma ad oluşturuluyor
içe aktarmak tesla = Araba. tesla
sabit modelX = yeni tesla. ModelX()
modelX.create() // Model X Oluşturuldu
Bu örnek, için bir takma ad oluşturur. Araba. tesla ad alanı. özelliklerine erişmek için bu takma adı kullanabilirsiniz. tesla Ad alanı, ModelX sınıfı gibi, daha kolay.
Ad Alanlarını Birden Çok Dosyada Kullanma
Bir ad alanını farklı bir dosyada kullanmak için onu içe aktarmanız gerekir. Ad alanlarını içe aktarmak, değişkenleri, işlevleri, sınıfları vb. içe aktarmaktan farklıdır. Projenize bağlı olarak modül sistemi, bunları kullanarak içe aktarabilirsiniz. gerekmek ya da içe aktarmak anahtar kelime.
Ancak, ad alanlarını yalnızca XML etiketi içeren tek satırlık bir yorum olan üçlü eğik çizgi yönergesini kullanarak içe aktarabilirsiniz.
Örneğin:
// ana.ts
///
Örnek.foo()
Bu örnek, a içindeki üçlü eğik çizgi yönergesini kullanır. ana.ts dosya. direktif şuna atıfta bulunur: index.ts içeren dosya, Örnek ad alanı. İçe aktarma olmadan, ad alanı yalnızca onu tanımlayan aynı dosya içinde kullanılabilir.
atıfta bulunduktan sonra index.ts dosyasına erişebilirsiniz Örnek ad alanı ve genel kullanıma açık üyeleri. Örneğin, foo yöntemi Örnek ad alanı.
Birden fazla dosya kullandığınızda, TypeScript'in gerekli tüm kodu derlediğinden ve yüklediğinden emin olmanız gerekir. Bunu, TypeScript derleyicisinden çıktıyı birleştirerek yapabilirsiniz. dışarıDosya seçenek. Bu, daha sonra tüm girdi dosyalarını tek bir JavaScript çıktı dosyasında derleyecektir. Derleyiciyi bu şekilde çalıştırmak için genel sözdizimi şöyledir:
tsc --outFile
Yer değiştirmek hedef JavaScript dosyanızın adıyla. Yer değiştirmek üçlü eğik çizgi yönergesini içeren TypeScript dosyasının adıyla.
Örneğin:
tsc --outFile index.js ana.ts
Bu komut, içeriğini derleyecektir. ana.ts dosya, üçlü eğik çizgi yönergesi tarafından başvurulan tüm dosyalarla birlikte index.js dosya.
Alternatif olarak, her dosyayı ayrı ayrı belirtebilirsiniz:
tsc --outFile
Üçlü eğik çizgi yönergesinin yalnızca bir dosyanın başında bildirildiğinde geçerli olduğuna dikkat etmek önemlidir. Başka bir yerde kullanmayı denerseniz, TypeScript bunu özel bir anlamı olmayan normal tek satırlık bir yorum olarak ele alacaktır.
Ad Alanlarını mı yoksa Modülleri mi Kullanmalısınız?
Ad alanları kullanımdan kaldırılmasa da, genellikle kodunuzu ES6 modüllerini kullanarak düzenlemeniz ve yönetmeniz önerilir. Modüllerin bakımı ve yönetimi daha kolaydır ve bunları birden çok dosyaya yayabilirsiniz.
Ek olarak, modüller arasındaki ilişkileri dosya düzeyinde içe ve dışa aktarma açısından belirleyebilirsiniz. Ad alanları bağımlılıklarını tanımlayamaz.
Sonuç olarak, ad alanları ve modüller arasındaki seçim, projenizin özel ihtiyaçlarına ve gereksinimlerine bağlı olacaktır, çünkü her ikisi de TypeScript'te kodu düzenlemek ve yönetmek için değerli bir yol sunar.