Söz konusu işlev, kullanıcı tanımlı bir sınıfın bir yöntemiyse , çalışma zamanında dönüş türünü (yapıcı işlevi) belirlemek için (ve bununla uygun gördüğünüz gibi yapın) yöntem dekoratörlerini Reflect Metadata ile birlikte kullanabilirsiniz .
Örneğin, konsola kaydedebilirsiniz:
function logReturnType(
target: Object | Function,
key: string,
descriptor: PropertyDescriptor
): PropertyDescriptor | void {
var returnType = Reflect.getMetadata("design:returntype", target, key);
console.log(returnType);
}
Sadece bu yöntem dekoratörünü seçtiğiniz bir yönteme yapıştırın ve sözde yöntem çağrısından döndürülen nesnenin yapıcı işlevine tam referansa sahip olursunuz.
class TestClass {
@logReturnType
public test(): number {
return 42;
}
}
Bununla birlikte, bu yaklaşımın birkaç önemli sınırlaması vardır:
- Bu şekilde dekore edilmiş bir yöntemde dönüş türünü açıkça tanımlamanız gerekir, aksi takdirde tanımsız olursunuz
Reflect.getMetadata
,
- yalnızca derlemeden sonra var olan gerçek türlere başvurabilirsiniz; yani, arayüz veya jenerik yok
Ayrıca, daktilo derleyicisi için aşağıdaki komut satırı bağımsız değişkenlerini belirtmeniz gerekir, çünkü hem dekoratörler hem de meta verileri yansıtmak, bu yazıyı yazarken deneysel özelliklerdir:
--emitDecoratorMetadata --experimentalDecorators