Typescript

ReplaceAll

bkdragon 2023. 10. 23. 20:07

문자열에서 특정부분을 모두 찾아 대체하는 타입을 만들어보자.

 

템플릿 리터럴 타입과 재귀를 이용해줘야 한다. 다만 이때 신경써야 하는 포인트는 이미 대체된 이후로 재귀가 되어야 한다는 것이다.

특정 부분이 대체되고 나서의 문자열에 대체하려는 요소가 새롭게 생겨나도 지나간 부분이기에 무시해줘야 한다.

 

type ReplaceAll<S extends string, From extends string, To extends string> = 
    From extends '' 
  ? S 
  : S extends `${infer F}${From}${infer R}`
  ? `${F}${To}${ReplaceAll<R, From, To>}`
  : S

 

From을 To 대체하고 남은 부분 (R)부터 재귀에 들어가는 것을 볼 수 있다. 간단해보여도 어려운 문제였다!