S가 중복된 문자를 포함하고 있는지 반환하는 타입 CheckRepeatedChars<S>를 구현하시겠습니까?
Implement type CheckRepeatedChars<S> which will return whether type S contains duplicated chars?
type CheckRepeatedCharsImpelment<T extends string, U extends string=never>=
T extends `${infer C}${infer R}`?
C extends U?true
:CheckRepeatedCharsImpelment<R,U|C>
:false
type CheckRepeatedChars<T extends string> = CheckRepeatedCharsImpelment<T>
우선 사용처에서 구현용 제네릭을 사용하지 못하게 하기 위해 구현과 실제 타입을 분리했다.
매 재귀에서 첫 번째 문자를 U에 넣는다.
첫번째 문자가 U에 있으면, 기존에 사용했다는 뜻이므로 true,
없으면 나머지 문자를 재귀적으로 반복한다. 이때, 호출하는 타입에는 기존에 사용했던 U와 함께, 지금 첫 번째 문자를 함께 넣어 (U|C) 호출한다.
만약 문자열이 비어있다면 중복된 문자가 없다는 뜻이므로 false를 반환한다.