🫧 문제
문자열의 첫 글자만 대문자로 바꾸고 나머지는 그대로 놔두는 Capitalize<T>를 구현하세요.
type capitalized = Capitalize<'hello world'> // expected to be 'Hello world'
🛠️ 테스트 케이스
type cases = [
Expect<Equal<MyCapitalize<'foobar'>, 'Foobar'>>,
Expect<Equal<MyCapitalize<'FOOBAR'>, 'FOOBAR'>>,
Expect<Equal<MyCapitalize<'foo bar'>, 'Foo bar'>>,
Expect<Equal<MyCapitalize<''>, ''>>,
Expect<Equal<MyCapitalize<'a'>, 'A'>>,
Expect<Equal<MyCapitalize<'b'>, 'B'>>,
Expect<Equal<MyCapitalize<'c'>, 'C'>>,
Expect<Equal<MyCapitalize<'d'>, 'D'>>,
Expect<Equal<MyCapitalize<'e'>, 'E'>>,
Expect<Equal<MyCapitalize<'f'>, 'F'>>,
Expect<Equal<MyCapitalize<'g'>, 'G'>>,
Expect<Equal<MyCapitalize<'h'>, 'H'>>,
Expect<Equal<MyCapitalize<'i'>, 'I'>>,
Expect<Equal<MyCapitalize<'j'>, 'J'>>,
Expect<Equal<MyCapitalize<'k'>, 'K'>>,
Expect<Equal<MyCapitalize<'l'>, 'L'>>,
Expect<Equal<MyCapitalize<'m'>, 'M'>>,
Expect<Equal<MyCapitalize<'n'>, 'N'>>,
Expect<Equal<MyCapitalize<'o'>, 'O'>>,
Expect<Equal<MyCapitalize<'p'>, 'P'>>,
Expect<Equal<MyCapitalize<'q'>, 'Q'>>,
Expect<Equal<MyCapitalize<'r'>, 'R'>>,
Expect<Equal<MyCapitalize<'s'>, 'S'>>,
Expect<Equal<MyCapitalize<'t'>, 'T'>>,
Expect<Equal<MyCapitalize<'u'>, 'U'>>,
Expect<Equal<MyCapitalize<'v'>, 'V'>>,
Expect<Equal<MyCapitalize<'w'>, 'W'>>,
Expect<Equal<MyCapitalize<'x'>, 'X'>>,
Expect<Equal<MyCapitalize<'y'>, 'Y'>>,
Expect<Equal<MyCapitalize<'z'>, 'Z'>>,
]
🎱 정답
type MyCapitalize<S extends string> = S extends `${infer A}${infer B}` ? `${Uppercase<A>}${B}` : S;
💭 해설
type MyCapitalize<S extends string>
MyCapitalize은 제네릭 타입 S를 받아와 다음과 같은 조건부 타입을 사용하여 처리합니다.
S extends `${infer A}${infer B}` ? `${Uppercase<A>}${B}` : S;
1. 만약 S가 ${infer A}${infer B}의 패턴과 일치한다면, A는 첫 번째 글자를 나타내고 B는 나머지 부분을 나타냅니다.
2. 이때 ${Uppercase<A>}를 사용해 A를 대문자로 변환한 뒤, ${Uppercase<A>}${B} 형태로 새로운 문자열을 생성합니다.
3. 위 조건에 일치하지 않는 경우, S 자체를 반환합니다.
결과적으로, 문자열의 첫 글자를 대문자로 변환한 새로운 문자열이 반환됩니다.
내장 문자열 조작 타입
Uppercase<StringType>
- 문자열의 각 문자를 대문자로 변환하고 리터럴 타입으로 만든다
Lowercase<StringType>
- 문자열의 각 문자를 소문자로 변환하고 리터럴 타입으로 만듬
Capitalize<StringType>
- 문자열의 첫 문자를 대문자로 변환하고 타입으로 만듬
Uncapitalize<StringType>
- 문자열의 첫 문자를 소문자로 변환하고 타입으로 만듬
'TypeScript' 카테고리의 다른 글
[Type-Challenges] 296. Permutation (0) | 2023.06.20 |
---|---|
[Type-Challenges] 119. ReplaceAll (0) | 2023.06.13 |
[Type-Challenges] 116. Replace (0) | 2023.06.13 |
[Type-Challenges] 18. Trim (0) | 2023.06.13 |
[TypeScript] Error(feat. catch) 타입 설정하기 (0) | 2023.05.01 |