반응형
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 |
Tags
- 크롤링
- Algorithm
- Nestjs
- javascript
- type challenge
- 프로그래머스 레벨 2
- 쉬운 문제
- 가천대
- ip
- 레벨 1
- Crawling
- 그래프
- 문자열
- dp
- HTTP 완벽 가이드
- 타입 챌린지
- HTTP
- 백준
- 타입스크립트
- socket
- typescript
- 수학
- 알고리즘
- BFS
- 프로그래머스
- 자바스크립트
- Node.js
- 소켓
- TCP
- dfs
Archives
- Today
- Total
kakasoo
앞 글자가 대문자인 문자열 타입 정의하기 본문
반응형
Answer
type LetterMap = {
'a': 'A',
'b': 'B',
'c': 'C',
'd': 'D',
'e': 'E',
'f': 'F',
'g': 'G',
'h': 'H',
'i': 'I',
'j': 'J',
'k': 'K',
'l': 'L',
'm': 'M',
'n': 'N',
'o': 'O',
'p': 'P',
'q': 'Q',
'r': 'R',
's': 'S',
't': 'T',
'u': 'U',
'v': 'V',
'w': 'W',
'x': 'X',
'y': 'Y',
'z': 'Z',
};
type MyCapitalize<S extends string> = S extends `${infer R extends keyof LetterMap}${infer rest}` ?
rest extends null ? `${LetterMap[R]}` : `${LetterMap[R]}${rest}` : S;
만약 타입 파라미터로 받은 인자 문자열 S가 `${infer R extends keyof LetterMap}${infer rest}`라면.
즉, 맨 앞이 소문자라면,
rest가 없을 경우에는 그 소문자를 대문자로 변환 ( = LetterMap[R]이 대문자가 된다. ) 하고,
rest가 있을 경우에는, 마찬가지로 그 소문자를 대문자로 변환하되 뒤에 rest를 이어 붙인 문자열이 되게 한다.
그리고 최초 질문으로 돌아가 문자열 S가 `${infer R extends keyof LetterMap}${infer rest}`가 아니라면,
즉 맨 앞이 소문자가 아니라면 ( = 소문자가 아닌 대문자, 혹은 애초에 한글이나 다른 문자일 수도 있다면 ),
그냥 그대로 S를 반환한다.
다만, 대문자의 경우, 사실 Uppercase라는 타입을 이용해서도 구현할 수 있다.
type A = Uppercase<'a'>; // 'A'
반응형
'프로그래밍 > TypeScript' 카테고리의 다른 글
MyAwaited, 프로미스 내부의 타입을 추론해서 꺼내기 (0) | 2023.02.25 |
---|---|
Chainable, 연쇄적인 호출이 가능한 타입 (0) | 2023.02.21 |
TupleToUnion 타입 정의하기 (0) | 2023.02.17 |
Readonly type 구현 (0) | 2023.02.15 |
infer R 타입을 이용한 GetReturnType (0) | 2023.02.12 |