Unfortunately many languages have poor support for named type definitions and higher order types, unlike e.g. Haskell. That would definitely help to avoid these problems.
``` type MyGeneric<TParam> = ...; type HigherOrderGeneric<TParam> = TParam extends string ? MyGeneric : never;
type Hey = HigherOrderGeneric<string><number>;
```
There are libraries that try to achieve this through some hacks, tho their ergonomics are really bad.