Ce face bigint și symbol
bigint este tipul numerelor întregi fără limită de mărime. Un literal bigint se scrie cu n la final: 9007199254740993n. Un number obișnuit reprezintă exact doar întregi până la 253 − 1 (Number.MAX_SAFE_INTEGER). TypeScript nu te lasă să amesteci bigint cu number în aceeași operație; convertești explicit cu BigInt(x) sau Number(x).
symbol este tipul valorilor create cu Symbol(). Fiecare simbol este unic, chiar dacă are aceeași descriere, deci este bun drept cheie de proprietate care nu se poate ciocni cu alte chei. JavaScript are simboluri predefinite cu rol special, de exemplu Symbol.iterator (vezi iteratori) și Symbol.dispose (vezi using).
unique symbol este tipul unui anumit simbol, declarat cu const. Doar cu el poți folosi simbolul ca nume de proprietate într-o interfață sau clasă.
Exemple
Exemplul 1: Calcule cu bigint
Cu number, 253 + 1 pierde precizie; cu bigint rezultatul este exact.
const limita = Number.MAX_SAFE_INTEGER;
console.log(limita + 2); // number: rezultat inexact
const mare: bigint = BigInt(limita) + 2n;
console.log(mare);
console.log((mare * mare).toString());
let factorial = 1n;
for (let i = 1n; i <= 25n; i++) factorial *= i;
console.log("25! =", factorial.toString());
Rezultat
9007199254740992
9007199254740993n
81129638414606699710187514626049
25! = 15511210043330985984000000
Exemplul 2: Nu se amestecă bigint cu number
const a: bigint = 10n;
const b: number = 5;
console.log(a + b);
Eroarea afișată de tsc
exemplu.mts(3,13): error TS2365: Operator '+' cannot be applied to types 'bigint' and 'number'.
Exemplul 3: symbol drept cheie de proprietate
Proprietatea cu cheie simbol nu apare în JSON.stringify și nici în Object.keys.
const ID: unique symbol = Symbol("id");
interface Elev {
nume: string;
[ID]: number;
}
const ana: Elev = { nume: "Ana", [ID]: 1042 };
console.log(ana[ID], ana.nume);
console.log(JSON.stringify(ana), Object.keys(ana));
console.log(Symbol("id") === Symbol("id"));
Rezultat
1042 Ana
{"nume":"Ana"} [ 'nume' ]
false
Greșeli frecvente
- Folosești
bigintpentru bani. Nu are zecimale; pentru lei și bani păstrează sumele în bani (întregi) canumber, sau folosește o bibliotecă de zecimale. - Afișezi un
bigintcuJSON.stringify: aruncă Do not know how to serialize a BigInt. Convertește-l întâi cutoString().
Comenzi înrudite
string, number, boolean: Cele trei tipuri primitive folosite cel mai des: texte, numere (întregi și zecimale) și valori adevărat/fals.iteratori cu tipuri: Un obiect cu metoda [Symbol.iterator] se poate parcurge cu for…of; tipurile sunt Iterable<T> și Iterator<T>.using (resurse): Declară o resursă care se eliberează automat la ieșirea din bloc, chiar dacă apare o eroare.index signatures: Descrie obiecte cu chei necunoscute dinainte: [cheie: string]: Tip, sau Record<string, Tip>.