TypeScript Academy · Lektion

JSON-værdityper

Definér en komplet, typesikker JSON-værdi-type

Lektion 3 af 413 trin

JSON-værdityper er en gratis TypeScript Academy-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i TypeScript Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. TypeScript Academy-kurset indeholder 4 lektioner i alt.

Hvad er en JSON-værdi?

JSON tillader et fast sæt værdiformer: strenge, tal, booleske værdier, null, arrays og objekter. En rekursiv type kan beskrive netop dette sæt.

type Json =
  | string
  | number
  | boolean
  | null
  | Json[]
  | { [k: string]: Json };
// arrays and objects nest Json again.

Den rekursive JSON-type

Den centrale pointe er, at arrays indeholder Json, og at objektværdier er Json, så typen refererer til sig selv for indlejrede data.

type Json =
  | string | number | boolean | null
  | Json[]
  | { [k: string]: Json };
const x: Json = { name: "Ada", tags: ["a", "b"], active: true };
console.log(x);

Primitive JSON-værdier

De enkleste JSON-værdier er primitive værdier. Hver af dem kan tildeles direkte til Json.

type Json = string | number | boolean | null | Json[] | { [k: string]: Json };
const a: Json = "hello";
const b: Json = 42;
const c: Json = true;
const d: Json = null;
console.log(a, b, c, d);

JSON-arrays

Et JSON-array er Json[], så det kan indeholde en blanding af alle JSON-værdier, herunder indlejrede arrays og objekter.

type Json = string | number | boolean | null | Json[] | { [k: string]: Json };
const arr: Json = [1, "two", true, null, [3, 4]];
console.log(Array.isArray(arr));

JSON-objekter

Et JSON-objekt knytter strengnøgler til Json-værdier via en indekssignatur, så vilkårlig indlejring er mulig.

type Json = string | number | boolean | null | Json[] | { [k: string]: Json };
const obj: Json = {
  user: { name: "Ada", age: 36 },
  scores: [10, 20, 30]
};
console.log(obj);

Dybt indlejret JSON

Fordi typen er rekursiv, er dybt indlejrede strukturer fuldt typede uden ekstra deklarationer.

type Json = string | number | boolean | null | Json[] | { [k: string]: Json };
const deep: Json = {
  a: { b: { c: [1, { d: true }] } }
};
console.log(deep);

Hvad JSON udelukker

Typen Json afviser korrekt værdier, som JSON ikke kan repræsentere, f.eks. undefined, funktioner eller Date-objekter.

type Json = string | number | boolean | null | Json[] | { [k: string]: Json };
// const bad: Json = undefined; // Error
// const fn: Json = () => 1;   // Error
const good: Json = { ok: true };
console.log(good);

Validering af JSON-former ved kørsel

Typen beskriver gyldig JSON, men du skal stadig validere input, du ikke stoler på, ved kørsel. En rekursiv typevagt kontrollerer hvert niveau.

type Json = string | number | boolean | null | Json[] | { [k: string]: Json };
function isJson(v: unknown): v is Json {
  if (v === null) return true;
  const t = typeof v;
  if (t === "string" || t === "number" || t === "boolean") return true;
  if (Array.isArray(v)) return v.every(isJson);
  if (t === "object") return Object.values(v as object).every(isJson);
  return false;
}
console.log(isJson({ a: [1, 2], b: "x" }));

Parsing til en Json-type

JSON.parse returnerer any, så du bør først caste det parsede resultat til Json efter validering eller typdeklarere variablen og validere den.

type Json = string | number | boolean | null | Json[] | { [k: string]: Json };
const raw = "{ \"id\": 1, \"tags\": [\"a\"] }";
const parsed = JSON.parse(raw) as Json;
console.log(parsed);

Gennemgang af en Json-værdi

En rekursiv gennemløber kan gennemgå enhver JSON-værdi og håndtere primitive værdier, arrays og objekter ved at kontrollere formen ved kørsel.

type Json = string | number | boolean | null | Json[] | { [k: string]: Json };
function countLeaves(v: Json): number {
  if (Array.isArray(v)) return v.reduce((a, x) => a + countLeaves(x), 0);
  if (v !== null && typeof v === "object") return Object.values(v).reduce((a, x) => a + countLeaves(x), 0);
  return 1;
}
console.log(countLeaves({ a: [1, 2], b: "x" }));

Hvorfor Json-typen er nyttig

En præcis Json-type dokumenterer nøjagtigt, hvad der kan passere din API-grænse, og opdager forsøg på at serialisere værdier, der ikke er JSON, ved kompilering.

type Json = string | number | boolean | null | Json[] | { [k: string]: Json };
function send(payload: Json): string {
  return JSON.stringify(payload);
}
console.log(send({ ok: true, items: [1, 2, 3] }));

Hurtigt tjek: JSON-værdityper

Test din forståelse af JSON-værdityper.

Opsummering: JSON-værdityper

Du definerede en rekursiv Json-type, der dækker primitive værdier, arrays og objekter, lærte, hvad den udelukker, og validerede input, du ikke stoler på, med en rekursiv typevagt.

type Json = string | number | boolean | null | Json[] | { [k: string]: Json };
const data: Json = { id: 1, tags: ["a", "b"] };
console.log(JSON.stringify(data));
Gratis at komme i gang

Lær TypeScript med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
101
Lektioner
352

Ofte stillede spørgsmål

Er lektionen “JSON-værdityper” gratis?

Ja — hele teksten til “JSON-værdityper” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af TypeScript Academy-kurset, skal du opgradere til CoddyKit PRO. TypeScript Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “JSON-værdityper”?

Definér en komplet, typesikker JSON-værdi-type Du øver dig i TypeScript Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på TypeScript Academy?

Der kræves ingen tidligere erfaring. TypeScript Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.

Hvor lang tid tager lektionen “JSON-værdityper”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne TypeScript Academy-lektion?

Ja. Alle TypeScript Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Rekursive typedefinitioner
  2. Typning af træstrukturer
  3. JSON-værdityper
  4. Rekursionsdybde og begrænsninger
← Tilbage til TypeScript Academy