35991-medium-myuppercase

Back

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