Ce face Uppercase
Uppercase<"get"> este tipul "GET", iar Lowercase<"GET"> este "get". Ele lucrează pe tipuri literale de text, inclusiv pe union-uri (se aplică fiecărei variante) și pe template literal types.
Sunt tipuri „intrinseci”: implementate direct în compilator, nu scrise în TypeScript. Transformarea folosește regulile JavaScript (toUpperCase/toLowerCase fără setări de limbă). Pentru string simplu, rezultatul rămâne un tip text general.
Nu schimbă nimic la rulare. Ca să ai și valoarea transformată, apelezi toUpperCase() și spui tipul cu as, pentru că metoda din JavaScript returnează doar string.
Parametri
| Parametru | Descriere |
|---|---|
S |
Un tip text: literal, union de literale sau template literal. |
Ce returnează
Tipul text transformat.
Exemple
Exemplul 1: Metode HTTP în ambele forme
type Metoda = "get" | "post" | "delete";
type MetodaHttp = Uppercase<Metoda>; // "GET" | "POST" | "DELETE"
function laHttp<M extends Metoda>(m: M): Uppercase<M> {
return m.toUpperCase() as Uppercase<M>;
}
const m: MetodaHttp = laHttp("post");
console.log(m, laHttp("delete"));
type Cod = Lowercase<"RO" | "MD">; // "ro" | "md"
const limba: Cod = "ro";
console.log(limba);
Rezultat
POST DELETE
ro
Exemplul 2: Constante din chei
Cheile obiectului devin nume de constante cu majuscule.
const ore = { inceput: 8, pauza: 12, sfarsit: 16 };
type Constante = { [K in keyof typeof ore as `ORA_${Uppercase<K>}`]: number };
const c: Constante = { ORA_INCEPUT: ore.inceput, ORA_PAUZA: ore.pauza, ORA_SFARSIT: ore.sfarsit };
console.log(c);
Rezultat
{ ORA_INCEPUT: 8, ORA_PAUZA: 12, ORA_SFARSIT: 16 }
Exemplul 3: Varianta cu litere mici nu se potrivește
type M = Uppercase<"get" | "post">;
const m: M = "get";
console.log(m);
Eroarea afișată de tsc
exemplu.mts(2,7): error TS2820: Type '"get"' is not assignable to type '"GET" | "POST"'. Did you mean '"GET"'?
Greșeli frecvente
- Te aștepți ca
Uppercase<string>să verifice că un text oarecare este cu majuscule. Pentru texte necunoscute la compilare, verificarea se face la rulare.
Comenzi înrudite
Capitalize: Capitalize<S> face prima literă a unui tip text mare; Uncapitalize<S> o face mică.template literal types: Tipuri de text construite ca un template string: `id-${number}` acceptă „id-1”, „id-42” și așa mai departe.mapped types: Construiesc un tip nou trecând prin fiecare cheie a altui tip: { [K in keyof T]: … }.tipuri literale: Un tip care acceptă o singură valoare exactă, de exemplu „Iași” sau 3; combinate în union dau liste de valori permise.