Ce face typeof (tip)
typeof are două sensuri. În cod obișnuit, este operatorul din JavaScript care returnează la rulare un text ("string", "number"…); vezi typeof guard. În poziție de tip (după : sau în type X = ...), este operatorul TypeScript care dă tipul unei variabile, al unei funcții sau al unui obiect.
Este util când ai deja o valoare și vrei tipul ei: un obiect de configurare, o funcție dintr-o bibliotecă, un tablou constant. Se combină des cu keyof, cu ReturnType, Parameters și cu as const ((typeof LISTA)[number] dă union-ul elementelor).
typeof de tip acceptă doar nume de variabile și proprietăți (typeof setari.limba), nu expresii arbitrare: typeof f() nu este permis; folosește ReturnType<typeof f>.
Exemple
Exemplul 1: Tipul unui obiect de configurare
const setariImplicite = {
limba: "ro",
tema: "luminoasă",
marimeFont: 16,
};
type Setari = typeof setariImplicite; // { limba: string; tema: string; marimeFont: number }
function aplica(schimbari: Partial<Setari>): Setari {
return { ...setariImplicite, ...schimbari };
}
console.log(aplica({ marimeFont: 18 }));
Rezultat
{ limba: 'ro', tema: 'luminoasă', marimeFont: 18 }
Exemplul 2: Union din elementele unui tablou constant
(typeof ORASE)[number] înseamnă „tipul oricărui element din tablou”. Cu as const, elementele au tipuri literale.
const ORASE = ["Iași", "Cluj", "Timișoara"] as const;
type Oras = (typeof ORASE)[number]; // "Iași" | "Cluj" | "Timișoara"
function esteOras(x: string): x is Oras {
return (ORASE as readonly string[]).includes(x);
}
for (const x of ["Cluj", "Paris"]) {
console.log(x, esteOras(x) ? "este în listă" : "nu este în listă");
}
Rezultat
Cluj este în listă
Paris nu este în listă
Exemplul 3: Tipul rezultatului unei funcții
function creeazaElev(nume: string, nota: number) {
return { nume, nota, promovat: nota >= 5, creat: "2026-10-19" };
}
type Elev = ReturnType<typeof creeazaElev>;
const lista: Elev[] = [creeazaElev("Ana", 10), creeazaElev("Mihai", 4)];
console.log(lista.filter((e) => e.promovat).map((e) => e.nume));
Rezultat
[ 'Ana' ]
Greșeli frecvente
- Scrii
type T = typeof creeazaElev("a", 1). Nu se acceptă un apel; foloseșteReturnType<typeof creeazaElev>. - Confunzi cele două
typeof:if (typeof x === "string")rulează în JavaScript,type T = typeof xexistă doar la compilare.
Comenzi înrudite
keyof: keyof T dă union-ul numelor de proprietăți ale lui T, de exemplu „nume” | „oras”.typeof guard: Verificarea typeof x === „string” (sau „number”, „boolean”…) restrânge tipul la primitivul respectiv.ReturnType: ReturnType<F> dă tipul rezultatului unei funcții; pentru o funcție concretă scrii ReturnType<typeof f>.as const: Face un literal complet readonly și păstrează valorile exacte ca tipuri: „Iași” în loc de string.indexed access (T[K]): T[„cheie”] dă tipul unei proprietăți din T; T[number] dă tipul elementelor unui tablou.