TypeScript 5.0 programlama dili, dekoratörler için yeni bir konsept sunuyor

Saberie

Active member


  1. TypeScript 5.0 programlama dili, dekoratörler için yeni bir konsept sunuyor

Microsoft, TypeScript 5.0’ın ilk beta sürümünü yayımladı. Sürüm, ECMAScript için düzlem tabanlı dekoratör konseptini yeniliyor. Ayrıca, parametre türü çıkarımı kısıtlanabilir ve artık tüm sıralamalar 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 bir değişiklik yok. Ekip, yalnızca küçük sürümleri ondalık basamaklar 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, orijinal yapılarını değiştirmeden mevcut nesnelere yeni işlevler kazandırmak için kullanılır. TypeScript, konsepti uzun süredir deneysel bir özellik olarak sunuyor. Sürüm 5, ilişkili ECMAScript teklifinin 3. aşamasına dayalı olarak yeni geliştirilmiş bir yaklaşım sunar. 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 gelişmiş erişim sağlayabilirsiniz. ECMAScript önerisinde de bulunan tipik bir örnek, bir yöntemi, hataları izlemek için her çağrıldığında konsola bir mesaj döndüren genel bir yöntemle değiştirmektir. Türün kontrol gerektirmeyen basit bir çeşidi, 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 bunun yerine bu işlevi 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öntem 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.

Şu an için yeni ve eski yan yana


Yeni uygulama ile dekoratörler, daha önce gerekli olan derleyici bayrağı olmadan kullanılabilir. --experimentalDecorators kullanım. Yine de ayarlanmışsa, TypeScript bir süre saklanması gereken eski uygulamaya geri döner.

Dekoratör meta veri çıkışı --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


Yeni dekoratör konseptine ek olarak, TypeScript 5.0 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 basit olurdu string[]. Bu formda kullanılan const bu, değerin değişmez olması gerektiği anlamına gelmez. Anahtar kelime bunun için ek olur readonly gerekli.

Ayrıca dönüştürmenin yalnızca doğrudan aramaya yazılan öğeler için geçerli olduğunu unutmayın. 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 başlayarak, numaralandırmalar her zaman birleşim numaralandırmalarıdır ve TypeScript 2.0’ın kendi numaralandırma türlerini tanıtmasından önceki orijinal uygulamada olduğu gibi artık sorgulanabilir sayısal sabitler değildir.

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 e @satisfies TypeScript 4.9’da tanıtılan için satisfies-Şebeke.

TypeScript 5.0’daki diğer yeni özellikler Microsoft 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)



ana sayfaya
 
Üst