Jeśli funkcja w pytaniu jest metodą klasy zdefiniowane przez użytkownika, można użyć method decorators w połączeniu z Reflect Metadata określić typ zwracanej (konstruktor) w wykonywania (a wraz z nim zrobić, jak uważasz) .
Na przykład, można go zalogować do konsoli:
function logReturnType(
target: Object | Function,
key: string,
descriptor: PropertyDescriptor
): PropertyDescriptor | void {
var returnType = Reflect.getMetadata("design:returntype", target, key);
console.log(returnType);
}
Wystarczy zatrzasnąć tej metody dekorator na metodzie wyboru i trzeba dokładnie odwołanie do funkcji konstruktora obiektu, który jest rzekomo zwróconego z wywołania metody.
class TestClass {
@logReturnType // logs Number (a string representation)
public test(): number {
return 42;
}
}
Istnieje kilka znaczących ograniczenia tego podejścia, jednak:
- trzeba jednoznacznie określić typ zwracanej na metodzie zdobione jako takie, inaczej dostaniesz niezdefiniowany od
Reflect.getMetadata
,
- można odwoływać się tylko do rzeczywistych typów, które istnieją również po kompilacji; czyli nie ma interfejsy lub leki generyczne
Ponadto musisz określić następujące argumenty wiersza poleceń dla kompilatora maszynopis, ponieważ obie dekoratorzy i odzwierciedlają metadane są funkcje eksperymentalne w momencie pisania tego posta:
--emitDecoratorMetadata --experimentalDecorators
Nie, nie tak czy inaczej z typeof. typeof zwróci tylko "funkcję" (* moja obudowa może być niepoprawna *). – Igor
Byłoby wspaniale, gdyby stało się to możliwe. Czasami definiujesz typy, kiedy wypychasz je z funkcji i nie ma (miłego) sposobu na uchwycenie tej struktury. –