35991-medium-myuppercase

Back

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