type ArrowFn = <TInput extends string>(input: TInput) => { complex_type: { x: 2, y: 2, my_type: TInput } };
type ExtractReturnType<T, TInput extends string> = T extends (input: TInput) => infer R ? R : never;
type GenericFn<TInput extends string> = (input: TInput) => ExtractReturnType<ArrowFn, TInput>
Figured it out