String#length처럼 동작하는 문자열 리터럴의 길이를 구하세요.
type LegnthOfStringImplement<S extends string,LengthArr extends any[]=[]>=
S extends `${infer _ extends string}${infer Last}`?
LegnthOfStringImplement<Last,[...LengthArr,1]>
:LengthArr['length']
type LengthOfString<S extends string> = LegnthOfStringImplement<S>
string의 length로는 직접적인 길이에 접근이 불가능하다.(string['length']의 타입으로 접근하면 number가 나온다)
하지만 배열의 length는 직접적인 길이에 접근이 가능하다. 그래서 재귀적으로 배열의 길이를 지정해주었다.
타입 챌린지에 자주 쓰는 스킬이므로 알아두는 것이 좋다.
사용처에서 직접 배열 제네릭에 접근하게 되면 문제가 생길 수 있으므로, 구현체를 한 번 감쌌다.
대부분의 풀이의 매커니즘은 비슷했다.