모든 문자를 대문자로 바꾸는 Uppercase<T>를 구현하라
Implement Uppercase<T>, convert all letter to uppercase
type UpperCase = {
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 MyUppercase<T extends string> =
T extends `${infer Head}${infer Rest}`?
Head extends keyof UpperCase?
`${UpperCase[Head]}${MyUppercase<Rest>}`
:`${Head}${MyUppercase<Rest>}`
:''
Uppercase를 사용하지 않고 푸는 문제이다
매 문자를 재귀적으로 순회하여
Head가 a~z 내에 있는 경우 그에 맞는 Uppercase를
그렇지 않다면 그냥 Head를 그 뒤에 있는 문자열과 합쳐 반환하는 방식이다.