Если рассматриваемая функция является методом определенного пользователем класса, вы можете использовать декораторы методов в сочетании с 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;
}
}
Однако у этого подхода есть несколько заметных ограничений:
- вам нужно явно определить тип возвращаемого значения для метода, оформленного как таковой, иначе вы получите undefined из
Reflect.getMetadata
,
- вы можете ссылаться только на фактические типы, которые также существуют после компиляции; то есть никаких интерфейсов или дженериков
Кроме того, вам необходимо указать следующие аргументы командной строки для компилятора машинописного текста, потому что и декораторы, и метаданные отражения являются экспериментальными функциями на момент написания этого сообщения:
--emitDecoratorMetadata --experimentalDecorators