1. RemoveX<'xxtestxx'>
먼저 xxtestxx에 대해 Str extends `x${infer Rest}`를 평가하는데 xxtestxx는 x로 시작하는 문자열이므로 true가 되고, Rest는 xtestxx가 됩니다. 다시 재귀적으로 RemoveX<'xtestxx'>가 수행됩니다.
2. RemoveX<'xtestxx'>
1단계와 같은 이유로 Remove<'testxx'>가 됩니다.
3. RemoveX<'testxx'>
이제 좌측에 x가 전부 지워졌으니 Str extends `x${infer Rest}`는 false가 되고, Str extends `${infer Rest}x`를 평가합니다. testxx는 x로 끝나는 문자열이므로 true가 되고, Rest는 testx가 됩니다. 그러면 Remove<'testx'>가 수행됩니다.
4. RemoveX<'testx'>
3단계와 같은 이유로 Remove<'test'>가 됩니다.
5. RemoveX<'test'>
Str extends `x${infer Rest}`도 false고 Str extends `${infer Rest}x``도 false이므로 자기 자신인 Str이 됩니다. 최종적으로 'test'가 됩니다.