Ce face Capitalize
Capitalize<"click"> este "Click": doar prima literă se schimbă, restul rămâne cum este. Uncapitalize<"Click"> face invers. Ca Uppercase, sunt tipuri intrinseci, se aplică fiecărei variante dintr-un union și nu schimbă nimic la rulare.
Locul lor obișnuit este în mapped types cu as și în template literal types: din cheia nume faci getNume/setNume, din evenimentul click faci onClick.
Cheile lui keyof T pot fi și numere sau simboluri, pe care Capitalize nu le acceptă; de aceea în mapped types scrii Capitalize<K & string>.
Parametri
| Parametru | Descriere |
|---|---|
S |
Un tip text: literal, union de literale sau template literal. |
Ce returnează
Tipul text cu prima literă schimbată.
Exemple
Exemplul 1: Nume de handler-e pentru evenimente
type Eveniment = "click" | "focus" | "schimbare";
type Handlere = { [E in Eveniment as `on${Capitalize<E>}`]?: () => void };
const h: Handlere = {
onClick: () => console.log("click!"),
onSchimbare: () => console.log("valoare nouă"),
};
for (const e of ["click", "focus", "schimbare"] as Eveniment[]) {
const cheie = `on${e[0].toUpperCase()}${e.slice(1)}` as `on${Capitalize<Eveniment>}`;
(h[cheie] ?? (() => console.log(`fără handler pentru ${e}`)))();
}
Rezultat
click!
fără handler pentru focus
valoare nouă
Exemplul 2: Uncapitalize pentru chei JSON
type CheiServer = "Nume" | "Oras" | "NotaFinala";
type CheiLocale = Uncapitalize<CheiServer>; // "nume" | "oras" | "notaFinala"
function laLocal(date: Record<CheiServer, string>): Record<CheiLocale, string> {
return { nume: date.Nume, oras: date.Oras, notaFinala: date.NotaFinala };
}
console.log(laLocal({ Nume: "Ana", Oras: "Iași", NotaFinala: "10" }));
Rezultat
{ nume: 'Ana', oras: 'Iași', notaFinala: '10' }
Exemplul 3: Restul literelor nu se schimbă
type T = Capitalize<"iASI">;
const a: T = "Iasi";
console.log(a);
Eroarea afișată de tsc
exemplu.mts(2,7): error TS2322: Type '"Iasi"' is not assignable to type '"IASI"'.
Greșeli frecvente
- Te aștepți ca
Capitalize<"iASI">să dea"Iasi". Dă"IASI": doar prima literă se schimbă. - Folosești
Capitalize<K>cuK extends keyof Tfără& string. tsc dă Type ‘K’ does not satisfy the constraint ‘string’.
Comenzi înrudite
Uppercase: Uppercase<S> transformă un tip text în majuscule, Lowercase<S> în litere mici, la nivel de tip.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]: … }.