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'가 됩니다.

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