Якщо функція, про яку йде мова, є методом визначеного користувачем класу, ви можете використовувати декоратори методів спільно з 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