type EnglishLettersMap = {
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 GreekLettersMap = {
α: "Α";
β: "Β";
γ: "Γ";
δ: "Δ";
ε: "Ε";
ζ: "Ζ";
η: "Η";
θ: "Θ";
ι: "Ι";
κ: "Κ";
λ: "Λ";
μ: "Μ";
ν: "Ν";
ξ: "Ξ";
ο: "Ο";
π: "Π";
ρ: "Ρ";
σ: "Σ";
ς: "Σ";
τ: "Τ";
υ: "Υ";
φ: "Φ";
χ: "Χ";
ψ: "Ψ";
ω: "Ω";
};
type LatinLettersWithDiacriticsMap = {
à: "À";
á: "Á";
â: "Â";
ã: "Ã";
ä: "Ä";
å: "Å";
æ: "Æ";
ç: "Ç";
è: "È";
é: "É";
ê: "Ê";
ë: "Ë";
ì: "Ì";
í: "Í";
î: "Î";
ï: "Ï";
ñ: "Ñ";
ò: "Ò";
ó: "Ó";
ô: "Ô";
õ: "Õ";
ö: "Ö";
ø: "Ø";
ù: "Ù";
ú: "Ú";
û: "Û";
ü: "Ü";
ý: "Ý";
ÿ: "Ÿ";
š: "Š";
ž: "Ž";
ß: "SS";
};
type LettersMap = EnglishLettersMap &
GreekLettersMap &
LatinLettersWithDiacriticsMap;
type MyUppercase<
T extends string,
Res extends string = ""
> = T extends `${infer First}${infer Rest}`
? First extends keyof LettersMap
? MyUppercase<Rest, `${Res}${LettersMap[First]}`>
: MyUppercase<Rest, `${Res}${First}`>
: Res;
不知道这题有什么意义 还是说有什么意想不到的奇妙解法
Solution by Barrenboat #37360
interface LetterDict {
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 F}${infer Tail}`
? F extends keyof LetterDict
? `${LetterDict[F]}${MyUppercase<Tail>}`
: `${F}${MyUppercase<Tail>}`
: T;
Solution by djdidi #37239
type MyUppercase<T extends string> = T extends `${infer F}${infer R}` ? `${Capitalize<F>}${MyUppercase<R>}` : T;
Solution by lvjiaxuan #37191
interface Mapping {
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 F}${infer R}`
? `${F extends keyof Mapping ? Mapping[F] : F}${MyUppercase<R>}`
: ''
Solution by Sun79 #36596