Limba pe care o vorbesc API-urile
API-urile schimbă date sub formă de JSON — text precum {"id": 1, "name": "Ana"}. TypeScript nu are nevoie de nicio bibliotecă pentru asta: JSON.stringify transformă o valoare în text JSON, iar JSON.parse transformă textul JSON înapoi într-o valoare. Ambele vin chiar din JavaScript.
O interface descrie forma pe care o aștepți de fiecare parte. Nu există o sintaxă specială pentru redenumirea unui câmp: cheia din JSON este exact numele proprietății, așa cum l-ai scris. Când o cheie trebuie să aibă alt nume, o redenumești manual — fie când construiești obiectul, fie imediat după ce îl analizezi.
De la obiect la JSON
JSON.stringify(value) produce un JSON compact, pentru mașini; JSON.stringify(value, null, 2) îl indentează cu două spații, pentru oameni și pentru jurnale.
O proprietate opțională (scrisă email?: string) care nu a fost niciodată setată este pur și simplu omisă din JSON — nu apare nicio cheie goală.
JSON compact și JSON aranjat frumos
Ana nu are email, așa că cheia email lipsește complet din JSON-ul ei. Înregistrarea completă a lui Ben se afișează indentată.
Ieșire: program TypeScript și rezultatul capturat
interface UserRecord {
id: number
name: string
// Câmp opțional: când lipsește, JSON.stringify nu include cheia deloc.
email?: string
}
const ana: UserRecord = { id: 1, name: "Ana" }
console.log(JSON.stringify(ana))
const ben: UserRecord = { id: 2, name: "Ben", email: "[email protected]" }
console.log(JSON.stringify(ben, null, 2))
De la JSON la obiect
JSON.parse întoarce valoarea analizată, iar as UserRecord îi spune verificatorului de tipuri ce te aștepți să găsești. Un JSON stricat nu întoarce o valoare de eroare — aruncă o excepție, deci învelește apelul în try/catch.
Un lucru de știut: cheile necunoscute nu sunt eliminate. JSON.parse păstrează fiecare cheie conținută de text; interfața descrie doar ceea ce promiți că vei folosi. Când vrei un obiect curat, copiază câmpurile de care ai nevoie.
Analiza textului și cheia în plus
JSON-ul conține o cheie extra pe care interfața nu o menționează niciodată. Nimic nu eșuează — cheia chiar există la rulare, iar copierea celor două câmpuri pe care le vrei dă obiectul curat { id: 7, name: 'Cleo' }. Un JSON stricat aruncă o excepție, iar catch afișează mesajul.
Ieșire: program TypeScript și rezultatul capturat
interface UserRecord {
id: number
name: string
}
const text = '{"id": 7, "name": "Cleo", "extra": "ignorat"}'
// JSON.parse păstrează fiecare cheie pe care o găsește — „as UserRecord” este
// doar o promisiune făcută verificatorului de tipuri, niciodată un filtru la rulare.
const parsed = JSON.parse(text) as UserRecord
console.log("obținut:", parsed)
// Copiază câmpurile la care te aștepți cu adevărat și cel în plus dispare.
const user: UserRecord = { id: parsed.id, name: parsed.name }
console.log("utilizator:", user)
// Un JSON stricat aruncă o excepție în loc să întoarcă o valoare de eroare.
try {
JSON.parse('{"id": ')
} catch (err) {
console.log("eroare:", (err as Error).message)
}
Date imbricate
Datele reale trimise de API-uri sunt imbricate: o comandă poartă cu ea utilizatorul și o listă de produse. Obiectele din interiorul obiectelor și tablourile se transformă automat în obiecte și tablouri JSON — nu e nevoie de nicio tratare specială.
O comandă cu un utilizator înăuntru
Obiectul imbricat user devine un obiect JSON imbricat, iar tabloul items devine un tablou JSON — forma datelor este forma JSON-ului.
Ieșire: program TypeScript și rezultatul capturat
interface UserRecord {
id: number
name: string
}
interface OrderRecord {
id: number
items: string[]
user: UserRecord
}
const order: OrderRecord = {
id: 1042,
items: ["tastatură", "mouse"],
user: { id: 1, name: "Ana" },
}
console.log(JSON.stringify(order, null, 2))