Typescript

문자열의 길이 구하기

bkdragon 2023. 10. 21. 21:24

 

타입 시스템에서는 배열 타입의 길이를 Type['length'] 로 간단하게 구할 수 있다. 아쉽게도 문자열 타입에는 먹히지 않는다. 그래서 문자열의 길이를 구하려면 배열을 이용해야 한다!

 

type LengthOfString<S extends string, T extends string[] = []> = S extends `${infer F}${infer R}` 
  ? LengthOfString<R, [...T, F]>
  : T['length']

 

빈 배열을 처음 파라미터로 받고 재귀적으로 하나씩 쌓아간다음 마지막에 배열의 길이를 반환한다.

 

풀이가 좀 짧지만 글로 남기는 이유는 타입 시스템에서 사용할 수 있는 테크닉이 꽤 포함되어 있기 때문이다.

 

1. infer 

  infer 키워드는 조건절에서 타입 추론을 도와준다. 

 

2. 재귀 

문자열은 하나씩 줄이고 배열은 하나씩 늘리면서 재귀적으로 들어간다.

 

3. length 및 "..."

타입 시스템에서 length와 "..."를 지원한다.