Jika fungsi tersebut adalah metode kelas yang ditetapkan pengguna, Anda dapat menggunakan metode dekorator dalam conjuction dengan Reflect Metadata untuk menentukan jenis kembali (konstruktor) di runtime (dan dengan itu, lakukan sesuai keinginan Anda).
Misalnya, Anda dapat memasukkannya ke konsol:
function logReturnType(
target: Object | Function,
key: string,
descriptor: PropertyDescriptor
): PropertyDescriptor | void {
var returnType = Reflect.getMetadata("design:returntype", target, key);
console.log(returnType);
}
Cukup pasang dekorator metode ini pada metode pilihan Anda dan Anda memiliki referensi yang tepat ke fungsi konstruktor dari objek yang seharusnya dikembalikan dari pemanggilan metode.
class TestClass {
@logReturnType
public test(): number {
return 42;
}
}
Namun, ada beberapa batasan penting untuk pendekatan ini:
- Anda perlu secara eksplisit mendefinisikan tipe kembalian pada metode yang didekorasi seperti itu, jika tidak Anda akan mendapatkan undefined from
Reflect.getMetadata
,
- Anda hanya dapat mereferensikan tipe sebenarnya yang juga ada setelah kompilasi; artinya, tidak ada antarmuka atau obat generik
Selain itu, Anda harus menentukan argumen baris perintah berikut untuk compiler skrip ketikan, karena dekorator dan metadata mencerminkan adalah fitur eksperimental saat menulis posting ini:
--emitDecoratorMetadata --experimentalDecorators