Get Return Type
Challenge
Implement the built-in ReturnType<T> generic without using it.
For example
const fn = (v: boolean) => {
if (v) return 1;
else return 2;
};
type a = MyReturnType<typeof fn>; // should be "1 | 2"
Solution
Zur Lösung des Problems müssen wir wieder das Schluesselwort infer nutzen.
Zusätzlich definieren wir eine Bedindung für den Eingabewert, sodass der Typ nur Funktionen erhalten kann. Den Rückgabetyp erhalten wir, indem wir diesen inferieren und einer Typ Variable zuweisen:
type MyReturnType<T extends (...args: any[]) => any> = T extends (
...args: any[]
) => infer Return
? Return
: never;