Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Redux
- frontend
- test
- component
- tanstackquery
- react-hook-form
- golang
- JPA
- satisfiles
- Chakra
- javascript
- go
- JavaSpring
- springboot
- RTK
- designpatterns
- Spring
- React
- hook
- css
- storybook
- 웹애플리케이션서버
- java
- 티스토리챌린지
- ReactHooks
- typescript
- 오블완
- Gin
- backend
Archives
- Today
- Total
bkdragon's log
문자열의 길이 구하기 본문
타입 시스템에서는 배열 타입의 길이를 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와 "..."를 지원한다.
'Typescript' 카테고리의 다른 글
Absolute (1) | 2023.10.29 |
---|---|
ReplaceAll (0) | 2023.10.23 |
as < satisfies (0) | 2023.08.04 |
satisfies 키워드란? (0) | 2023.07.02 |
Template Literal Types (0) | 2023.04.04 |