Se a função em questão for um método de uma classe definida pelo usuário, você pode usar decoradores de método em conjunto com Reflect Metadata para determinar o tipo de retorno (função de construtor) em tempo de execução (e com ela, faça o que achar necessário).
Por exemplo, você pode registrá-lo no console:
function logReturnType(
target: Object | Function,
key: string,
descriptor: PropertyDescriptor
): PropertyDescriptor | void {
var returnType = Reflect.getMetadata("design:returntype", target, key);
console.log(returnType);
}
Basta ajustar esse decorador de método em um método de sua escolha e você terá a referência exata à função construtora do objeto que supostamente é retornado da chamada do método.
class TestClass {
@logReturnType // logs Number (a string representation)
public test(): number {
return 42;
}
}
No entanto, existem algumas limitações notáveis para essa abordagem:
- você precisa definir explicitamente o tipo de retorno em um método decorado como tal, caso contrário, você obterá indefinido de
Reflect.getMetadata
,
- você só pode fazer referência a tipos reais que também existem após a compilação; ou seja, sem interfaces ou genéricos
Além disso, você precisará especificar os seguintes argumentos de linha de comando para o compilador de texto digitado, porque os decoradores e os metadados refletidos são recursos experimentais no momento da redação desta postagem:
--emitDecoratorMetadata --experimentalDecorators