reflect-metadata ve Tasarım Türleri
Parametre ve özellik türlerini çalışma zamanında yakalayın.
reflect-metadata ve Tasarım Türleri, CoddyKit'te ücretsiz bir TypeScript Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, TypeScript Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. TypeScript Academy kursu toplamda 4 dersten oluşur.
reflect-metadata ve Tasarım Türleri
Standartlaştırılmış meta veriler bulunmadan önce TypeScript, reflect-metadata kitaplığı ve emitDecoratorMetadata derleyici seçeneği aracılığıyla tasarım zamanı tür bilgilerini çalışma zamanında üretebiliyordu. Bu ders, daha eski ancak hâlâ yaygın olarak kullanılan bu mekanizmayı ele alır.
Özelliği Etkinleştirme
İki şey gereklidir: derleyici seçeneklerini etkinleştirin ve kitaplığı programın giriş noktasında bir kez içe aktarın.
// tsconfig.json
// {
// "compilerOptions": {
// "experimentalDecorators": true,
// "emitDecoratorMetadata": true
// }
// }
import "reflect-metadata";Neler Üretilir
emitDecoratorMetadata ile derleyici, dekore edilmiş üyeler için üç anahtar üretir: design:type, design:paramtypes ve design:returntype. Değerler kurucu işlevlerdir (örneğin String, Number).
design:type Okuma
Dekore edilmiş bir özellik için Reflect.getMetadata("design:type", target, key), özelliğin tür kurucusunu döndürür.
import "reflect-metadata";
function track(target: any, key: string) {
const t = Reflect.getMetadata("design:type", target, key);
console.log(key, "->", t.name); // e.g. "name -> String"
}
class Person {
@track name!: string;
@track age!: number;
}design:paramtypes Okuma
Bir kurucuda veya yöntemde design:paramtypes, parametre türü kurucularından oluşan bir dizidir ve bağımlılık enjeksiyonunun temelini oluşturur.
function injectable(target: any) {
const params = Reflect.getMetadata("design:paramtypes", target);
console.log(params.map((p: any) => p.name)); // ["Database", "Logger"]
}
@injectable
class Service {
constructor(private db: Database, private log: Logger) {}
}Üretilen Türlerin Sınırlamaları
Yalnızca basit ve çalışma zamanında temsil edilebilen türler korunur. Arayüzler, birleşimler ve genel türler, çalışma zamanında kurucuları olmadığından Object değerine indirgenir. Tasarım türleri yaklaşık bilgilerdir; tam TS türü değildir.
Reflect ile Özel Meta Veri
Tasarım türlerinden bağımsız olarak kendi meta veri anahtarlarınızı Reflect.defineMetadata ile de tanımlayabilirsiniz.
import "reflect-metadata";
function required(target: any, key: string) {
Reflect.defineMetadata("required", true, target, key);
}
function isRequired(target: any, key: string) {
return Reflect.getMetadata("required", target, key) === true;
}Nerede Kullanılır
Bu mekanizma birçok köklü çatıyı (NestJS, TypeORM, class-validator) destekler. Siz türleri yeniden belirtmek zorunda kalmadan bağımlılıkları bağlamak ve değerleri doğrulamak için design:type ile design:paramtypes bilgilerini okurlar.
reflect-metadata ve Standart Meta Veriler
Yeni Symbol.metadata API'si dilin bir parçasıdır ve tasarım türleri üretmez. reflect-metadata benzersiz olarak tür bilgisi sağlar, ancak deneysel dekoratör kipine bağlıdır. Proje başına bir model seçin.
İçe Aktarma Sırası Önemlidir
import "reflect-metadata", dekore edilmiş herhangi bir sınıf değerlendirilmeden önce bir kez çalıştırılmalıdır; çünkü küresel Reflect nesnesine meta veri işlevlerini ekler. Bunu giriş dosyanızın en üstünde içe aktarın.
Neden Önemlidir
Tasarım türlerinin üretilmesi, çatıların derleme zamanı türleriyle çalışma zamanı davranışı arasındaki boşluğu kapatmasını sağlar; bu, kullanımı kolay DI ve doğrulama için temel etkendir. Sınırlamalarını bilmek (arayüz ve genel tür bulunmaması), şaşırtıcı Object sonuçlarını önler.
Kısa Kontrol
reflect-metadata anlayışınızı sınayın.
Özet
experimentalDecorators + emitDecoratorMetadata ve erkenden yapılan bir import "reflect-metadata" ile derleyici, design:type ve design:paramtypes bilgilerini çalışma zamanı kurucuları olarak üretir. Çatılar bunları DI ve doğrulama için okur; ancak arayüzler, birleşimler ve genel türler Object değerine indirgenir.
Sıkça Sorulan Sorular
“reflect-metadata ve Tasarım Türleri” dersi ücretsiz mi?
Evet — “reflect-metadata ve Tasarım Türleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve TypeScript Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. TypeScript Academy kursu toplamda 4 dersten oluşur.
“reflect-metadata ve Tasarım Türleri” dersinde ne öğreneceğim?
Parametre ve özellik türlerini çalışma zamanında yakalayın. TypeScript Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
TypeScript Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te TypeScript Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“reflect-metadata ve Tasarım Türleri” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu TypeScript Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her TypeScript Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- 3. Aşama Dekoratörlerini Açıklama
- Dekoratör Üst Verileri
- reflect-metadata ve Tasarım Türleri
- Dekoratör Çerçevesi Oluşturma