@colinhacks ("Colin McDonnell") replied to a tweet by @colinhacks:
You have to write your aliases in a particular way for tail call elimination to be possible - generally, don't put the "recursive" call in a nested object or union type (and don't have more than one)
https://devblogs.microsoft.com/typescript/announcing-typescript-4-5/#tailrec-conditional