หากฟังก์ชันที่เป็นปัญหาเป็นวิธีการของคลาสที่ผู้ใช้กำหนดคุณสามารถใช้เมธอดมัณฑนากรร่วมกับReflect Metadataเพื่อกำหนดประเภทการส่งคืน (ฟังก์ชันตัวสร้าง) ที่รันไทม์ (และทำตามที่เห็นสมควร)
ตัวอย่างเช่นคุณสามารถบันทึกลงในคอนโซล:
function logReturnType(
target: Object | Function,
key: string,
descriptor: PropertyDescriptor
): PropertyDescriptor | void {
var returnType = Reflect.getMetadata("design:returntype", target, key);
console.log(returnType);
}
เพียงแค่ใช้ตัวตกแต่งวิธีนี้ตามวิธีการที่คุณเลือกและคุณมีการอ้างอิงที่แน่นอนไปยังฟังก์ชันตัวสร้างของวัตถุที่ถูกส่งกลับจากการเรียกใช้เมธอด
class TestClass {
@logReturnType
public test(): number {
return 42;
}
}
อย่างไรก็ตามมีข้อ จำกัด ที่น่าสังเกตบางประการสำหรับแนวทางนี้:
- คุณจะต้องชัดเจนกำหนดประเภทการกลับมาอยู่กับวิธีการตกแต่งเป็นเช่นนี้มิฉะนั้นคุณจะได้รับการกำหนดจาก
Reflect.getMetadata
,
- คุณสามารถอ้างอิงเฉพาะประเภทจริงซึ่งมีอยู่หลังจากการคอมไพล์ นั่นคือไม่มีอินเทอร์เฟซหรือข้อมูลทั่วไป
นอกจากนี้คุณจะต้องระบุอาร์กิวเมนต์บรรทัดคำสั่งต่อไปนี้สำหรับคอมไพเลอร์ typescript เนื่องจากทั้งตัวตกแต่งและข้อมูลเมตาที่สะท้อนเป็นคุณลักษณะทดลองในการเขียนโพสต์นี้:
--emitDecoratorMetadata --experimentalDecorators