kakasoo

Replace, 처음으로 만난 단어를 대체하여 새 문자열 만들기 본문

프로그래밍/TypeScript

Replace, 처음으로 만난 단어를 대체하여 새 문자열 만들기

카카수(kakasoo) 2023. 3. 22. 00:13
반응형
// type Replace<S extends string, From extends string, To extends string> = S extends `${infer R}${From}${infer T}` ? `${R}${To}${T}` : S
type Replace<S extends string, From extends string, To extends string> = From extends '' ? S : S extends `${infer R}${From}${infer T}` ? `${R}${To}${T}` : S;

처음에 정의한 타입으로는 From이 빈 문자일 경우에 제대로 동작하지 않았다.

그래서 Replace에는 From이 빈 문자일 경우에는 그대로 S를 리턴하도록 하는 구문을 추가했다.

이 타입은 `${infer R}${From}${infer T}`로 구성된 타입에서 From을 To로 바꾸는 타입이다.

굳이 T를 붙인 이유는, 이 타입의 초기 문자열 S가 'foobarbar'와 같이 동일한 단어가 2번 반복될 경우 T가 없으면 마지막 단어를 바꾸기 때문이다.

'foobarbar'의 'bar'를 'foo'로 바꾼다면 'foofoobar'가 나오는 것이 옳다.

반응형