Si la función en cuestión es un método de una clase definida por el usuario, puede usar decoradores de métodos junto con Reflect Metadata para determinar el tipo de retorno (función constructora) en tiempo de ejecución (y con él, hacer lo que crea conveniente).
Por ejemplo, puede registrarlo en la consola:
function logReturnType(
target: Object | Function,
key: string,
descriptor: PropertyDescriptor
): PropertyDescriptor | void {
var returnType = Reflect.getMetadata("design:returntype", target, key);
console.log(returnType);
}
Simplemente coloque este decorador de métodos en un método de su elección y tendrá la referencia exacta a la función constructora del objeto que supuestamente se devuelve desde la llamada al método.
class TestClass {
@logReturnType
public test(): number {
return 42;
}
}
Sin embargo, existen algunas limitaciones notables para este enfoque:
- necesita definir explícitamente el tipo de retorno en un método decorado como tal, de lo contrario, obtendrá indefinido de
Reflect.getMetadata
,
- solo puede hacer referencia a tipos reales que también existen después de la compilación; es decir, sin interfaces ni genéricos
Además, deberá especificar los siguientes argumentos de línea de comando para el compilador de mecanografiado, porque tanto los decoradores como los metadatos reflect son características experimentales al momento de escribir esta publicación:
--emitDecoratorMetadata --experimentalDecorators