TypeScript 5.0 programlama dili, dekoratörler için yeni bir konsept getiriyor
Microsoft, TypeScript 5.0’ın ilk beta sürümünü yayımladı. Sürüm, dekoratör konseptini ECMAScript planlarına dayalı olarak yeniliyor. Ek olarak, parametrelerin tür çıkarımı kısıtlanabilir ve artık tüm numaralandırmalar birleşimler olarak oluşturulur.
Sözde yeni bir ana sürüme geçilmesine rağmen, Kasım 2022’de piyasaya sürülen TypeScript 4.9’a kıyasla uyumsuzluklara yol açan büyük değişiklikler yok. Ekip, yalnızca küçük sürümleri ondalık basamak olarak saydığı önceki sayma yöntemini izliyor. . İki buçuk yıl önce TypeScript 4.0, 3.9 sürümünün halefiydi.
Yeni dekore edilmiş
Dekoratörler, mevcut nesnelere orijinal yapılarını değiştirmeden yeni işlevsellik kazandırmak için kullanılır. TypeScript, konsepti uzun süredir deneysel bir özellik olarak sunuyor. Sürüm 5, ilgili ECMAScript teklifinin Aşama 3’ünü temel alan yeni geliştirilmiş bir yaklaşım getiriyor. Bu, bazı açılardan, TypeScript’teki orijinal uygulamanın temelini oluşturan ikinci aşamadan farklıdır.
Dekoratörler, sınıflar veya bunların işlevleri ve özellikleri üzerinde çağrılan işlevlerdir. Öğeleri değiştirebilir, başlatabilir veya bunlara gelişmiş erişim sağlayabilirsiniz. ECMAScript önerisinde de bulunabilen tipik bir örnek, bir yöntemi, hataları izlemek için her çağrıldığında konsola bir mesaj çıkaran genel bir yöntemle değiştirmektir. Tip denetimi olmayan basit bir varyant, TypeScript blogunda bulunabilir:
function loggedMethod(originalMethod: any, _context: any) {
function replacementMethod(this: any, ...args: any[]) {
console.log("LOG: Entering method.")
const result = originalMethod.call(this, ...args);
console.log("LOG: Exiting method.")
return result;
}
return replacementMethod;
}
ile bir @loggedMethod dekore edilmiş yöntem, bu işlevi yerine kullanır. O ilk verir LOG: Entering method. daha sonra orijinal yöntemi yürütür (originalMethod.call) sonuçlandırmak LOG: Exiting method. konsola yazmak için:
class Person {
name: string;
constructor(name: string) {
this.name = name;
}
@loggedMethod
greet() {
console.log(`Hello, my name is ${this.name}.`);
}
}
const p = new Person("Ray");
p.greet();
// Output:
//
// LOG: Entering method.
// Hello, my name is Ray.
// LOG: Exiting method.
Orijinal yönteme ek olarak, dekoratör işlevi ayrıca bağlamı bir parametre olarak alır. Diğer şeylerin yanı sıra, orijinal yöntemin adını belirlemek veya özel olarak bildirilip bildirilmediğini sorgulamak için kullanılabilir. Yukarıdaki örnek için, işlev yalnızca yöntemin çağrıldığını gösteremez, aynı zamanda adını da gösterebilir:
console.log(`LOG: Entering method '${methodName}'.`)
TypeScript blogunda, parametrelerin doğru yazılmasına dikkat eden genişletilmiş bir örnek de vardır.
Şimdilik yeni ve eski yan yana
Yeni uygulama ile dekoratörler, daha önce gerekli olan derleyici bayrağı olmadan kullanılabilir. --experimentalDecorators kullanmak. Yine de ayarlanmışsa, TypeScript eski uygulamaya geri döner ve bu da bir süre muhafaza edilmelidir.
Dekoratörlerin meta verilerinin çıktısı --emitDecoratorMetadata henüz ECMAScript uygulamasının 3. Aşamasının bir parçası olmadığı için yeni uygulamada çalışmıyor. Ayrıca, eski uygulamadan farklı olarak hiçbir parametre dekore edilemez.
Sürekli yazılan parametreler
TypeScript 5.0, yeni dekoratör konseptine ek olarak birkaç önemli ekleme daha getiriyor. Diğer şeylerin yanı sıra, mümkün olan en kesin tür çıkarımını sağlamak için bir parametre bildirimi sabit olarak bildirilebilir:
type HasNames = { names: readonly string[] };
function getNamesExactly<const T extends HasNames>(arg: T):
T["names"] {
return arg.names;
}
// Inferred type: readonly ["Alice", "Bob", "Eve"]
const names = getNamesExactly({ names: ["Alice", "Bob", "Eve"] });
anahtar kelime const ikinci satırda, TypeScript’in tam türü yakalamasını sağlar. Ekleme olmadan, tür düz olurdu string[]. Bu formda kullanılan const değerin değişmez olması gerektiği anlamına gelmez. Anahtar kelime bunun için ek olur readonly gerekli.
Dönüştürmenin yalnızca doğrudan çağrıda yazılan öğeler için geçerli olduğuna da dikkat edilmelidir. Daha önce bir dizide oluşturulan değerler için, TypeScript genel tür çıkarımını kullanır.
Numaralandırmalar, yapılandırmalar ve belgeler
TypeScript 5.0’dan itibaren, numaralandırmalar her zaman birleşik numaralandırmalardır ve TypeScript 2.0’ın kendi numaralandırma türlerini tanıtmasından önceki orijinal uygulamada olduğu gibi artık şüphesiz sayısal sabitlerdir.
Diğer bir yenilik ise projeler için yapılandırma dosyasıyla ilgilidir. Bunlar şimdi olabilir "extends" birden fazla temele dayanır.
TypeScript 5.0, JSDoc ile etkileşim içinde iki yeni ayrım bilir: @overload aşırı yüklenmiş işlevler için ve @satisfies TypeScript 4.9’da tanıtılan için satisfies-Şebeke.
TypeScript 5.0’daki diğer yeni özellikler Microsoft’un geliştirici blogunda bulunabilir. Betayı test etmekle ilgilenenler, onu NuGet’ten veya npm aracılığıyla şu komutla indirebilir: npm install typescript yüklemek. TypeScript 5.0’ın son sürümünün 14 Mart’ta yayınlanması planlanıyor.
(rm)
Haberin Sonu