반응형
문제
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']
를 통해 전체 길이를 받을 수 있다는 것
- S 말고 T라는
string[]
타입을 만들어줍니다 - S라는 문자를 첫 한 글자와 나머지 전부로 분리합니다 =>
S extends
${string}${infer R}`` - 뭘 하려는지 알겠죠? 재귀를 돌면서 계속 T를 채워줍니다
- 만약 T가
[]
라면 S의 첫 글자를 넣어서 재귀를 돌리고 ... 돌리고... 돌리고...
- 만약 T가
- 마지막으로
S extends
${string}${infer R}``이 실패할 때: S가 ""가 될 때 T['length']
로 길이를 꺼냅니다
반응형
'✍ 공부 > TypeScript' 카테고리의 다른 글
[type-challenges] Append to object (0) | 2023.06.27 |
---|---|
[type-challenges] Flatten (0) | 2023.06.26 |
[type-challenges] Append Argument (0) | 2023.06.26 |
[type-challenges] ReplaceAll (0) | 2023.06.13 |
[type-challenges] Replace (0) | 2023.06.13 |