I usually try to keep flow function types separate from their implementation. It\'s a slightly more readable when I write:
type Fn = string => string; const a
So I have noticed that if I use bounded generics, it'll work:
type H = (input: T) => T; const h:H<*> = i => i; const a: string = h('apple'); // √ const b: number = h(7); // √ const c: {} = h({ nane: 'jon' }); // √
Don't ask me WHY.