✍ 공부/TypeScript

[type-challenges] Length of String

Po_tta_tt0 2023. 6. 26. 08:21
반응형

문제

String#length처럼 동작하는 문자열 리터럴의 길이를 구하세요.

설명

/* _____________ Your Code Here _____________ */

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


/* _____________ Test Cases _____________ */
import type { Equal, Expect } from '@type-challenges/utils'


type cases = [
  Expect<Equal<LengthOfString<''>, 0>>,
  Expect<Equal<LengthOfString<'kumiko'>, 6>>,
  Expect<Equal<LengthOfString<'reina'>, 5>>,
  Expect<Equal<LengthOfString<'Sound! Euphonium'>, 16>>,
]

타입스크립트.. 배워도 배워도 어렵다...
아이디어: 배열 타입은 Arr['length']를 통해 전체 길이를 받을 수 있다는 것

  1. S 말고 T라는 string[] 타입을 만들어줍니다
  2. S라는 문자를 첫 한 글자와 나머지 전부로 분리합니다 => S extends${string}${infer R}``
  3. 뭘 하려는지 알겠죠? 재귀를 돌면서 계속 T를 채워줍니다
    • 만약 T가 []라면 S의 첫 글자를 넣어서 재귀를 돌리고 ... 돌리고... 돌리고...
  4. 마지막으로 S extends${string}${infer R}``이 실패할 때: S가 ""가 될 때
  5. T['length']로 길이를 꺼냅니다

 

 

반응형