I feel the no-numbers requirement essentially just boils down to replacing `num % 5 == 0` with `num.endswith(('0', '5', 'A'))` - or at least that's what I went with while playing along. Most of the complication (after the author realized they should use base-15) seems self-inflicted from the choice to write it within the type system, which the interviewer advised against.
Fully granted that I'm not familiar with TypeScript, but I find it hard to believe that code like the below is more readable to anyone than the equivalent `for num in nums` loop.
type FizzBuzz<T> = T extends `${_}${_|""}${_|""}` ? `${Fizzer<T>}${Bazzer<T>}${Buzzer<T>}` : "";
type Folded<T> = T extends [infer Head, ...infer Tail] ? `${FizzBuzz<Head>}${Folded<Tail>}` : "";