더북(TheBook)

1. RemoveX<'xxtestxx'>

먼저 xxtestxx에 대해 Str extends `x${infer Rest}`를 평가하는데 xxtestxxx로 시작하는 문자열이므로 true가 되고, Restxtestxx가 됩니다. 다시 재귀적으로 RemoveX<'xtestxx'>가 수행됩니다.

2. RemoveX<'xtestxx'>

1단계와 같은 이유로 Remove<'testxx'>가 됩니다.

3. RemoveX<'testxx'>

이제 좌측에 x가 전부 지워졌으니 Str extends `x${infer Rest}`false가 되고, Str extends `${infer Rest}x`를 평가합니다. testxxx로 끝나는 문자열이므로 true가 되고, Resttestx가 됩니다. 그러면 Remove<'testx'>가 수행됩니다.

4. RemoveX<'testx'>

3단계와 같은 이유로 Remove<'test'>가 됩니다.

5. RemoveX<'test'>

Str extends `x${infer Rest}`falseStr extends `${infer Rest}x``false이므로 자기 자신인 Str이 됩니다. 최종적으로 'test'가 됩니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.