TypeScript Academy · leksjon

readonly-egenskaper

Merk objektegenskaper som uforanderlige etter initialisering.

Leksjon 1 av 413 trinn

readonly-egenskaper er en gratis leksjon i TypeScript Academy på CoddyKit. Dette er leksjon 1 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i TypeScript Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i TypeScript Academy inneholder totalt 4 leksjoner.

readonly-modifikatoren

Modifikatoren readonly markerer en egenskap som kan angis én gang, men aldri tildeles på nytt senere. Den uttrykker immutabilitet på typenivå og bidrar til å forhindre utilsiktede endringer.

interface Point {
  readonly x: number;
  readonly y: number;
}
const p: Point = { x: 1, y: 2 };
console.log(p.x, p.y);
// p.x = 5; // Error: cannot assign to readonly property

readonly i grensesnitt

I et grensesnitt dokumenterer readonly hvilke felt som er faste etter opprettelsen. De som bruker grensesnittet, kan lese feltene fritt, men kompilatoren blokkerer ny tildeling.

interface Config {
  readonly env: string;
  retries: number; // mutable
}
const c: Config = { env: 'prod', retries: 3 };
c.retries = 5; // allowed
console.log(c.env, c.retries);

Kompileringsfeil ved ny tildeling

Forsøk på å skrive til en readonly-egenskap gir en kompileringsfeil. Dette fanger en hel kategori feil der delt tilstand endres uventet.

interface User {
  readonly id: number;
  name: string;
}
const u: User = { id: 1, name: 'Ada' };
u.name = 'Grace'; // ok
// u.id = 2; // Error
console.log(u);

readonly på klasseegenskaper

Klasser støtter også readonly. Et skrivebeskyttet felt kan initialiseres ved deklarasjonen eller inne i konstruktøren, men ingen andre steder.

class Circle {
  readonly radius: number;
  constructor(r: number) {
    this.radius = r; // allowed in constructor
  }
}
const c = new Circle(5);
console.log(c.radius);

Angi verdien én gang i konstruktøren

Konstruktøren er det eneste stedet utenom deklarasjonen der du kan tildele et readonly-felt. Etter opprettelsen er verdien låst så lenge objektet eksisterer.

class Account {
  readonly owner: string;
  constructor(owner: string) {
    this.owner = owner;
  }
  rename() {
    // this.owner = 'x'; // Error: readonly outside constructor
  }
}
console.log(new Account('Sam').owner);

readonly-parameter-egenskaper

TypeScripts parameter-egenskaper lar deg deklarere og initialisere et readonly-felt direkte i konstruktørsignaturen, slik at du trenger mindre standardkode.

class Vector {
  constructor(
    readonly x: number,
    readonly y: number
  ) {}
}
const v = new Vector(3, 4);
console.log(v.x, v.y);

readonly gjelder bare ved kompilering

Det er viktig å merke seg at readonly bare finnes i typesystemet. Det fjernes ved kjøring — JavaScript har ikke noe konsept for det. Det forhindrer ny tildeling i TypeScript-koden din, men ikke i kompilert kode som nås via typeløse baner.

interface Box { readonly value: number; }
const b: Box = { value: 10 };
// At runtime b is a plain object; readonly is not enforced by JS.
console.log(b.value);

readonly kontra const

Ikke bland dem sammen. const hindrer at en variabel bindes til en ny verdi. readonly hindrer at en egenskap tildeles på nytt. Et const-objekt kan fortsatt ha egenskaper som kan endres, med mindre de er readonly.

const obj = { count: 0 }; // const binding
obj.count = 5; // allowed: property is mutable
console.log(obj.count);

Grunnleggende sett overflatisk

readonly er overflatisk: det beskytter selve egenskapen, ikke innholdet i objektet eller arrayen den peker på. En readonly-referanse til et objekt tillater fortsatt at objektets felt endres.

interface Holder { readonly data: { n: number }; }
const h: Holder = { data: { n: 1 } };
// h.data = {...}; // Error
h.data.n = 99; // allowed: inner field is not readonly
console.log(h.data.n);

Bruke readonly for tryggere API-er

Ved å merke feltene i returnerte objekter med readonly signaliserer du at de som kaller koden, ikke bør endre dem. Hensikten bygges inn i typen, slik at feil bruk blir en kompileringsfeil i stedet for en stille feil.

interface Snapshot { readonly takenAt: number; readonly size: number; }
function snapshot(): Snapshot {
  return { takenAt: Date.now(), size: 1024 };
}
const s = snapshot();
console.log(s.size);

readonly i indekssignaturer

Du kan også gjøre indekssignaturer readonly. Da får du en map-lignende type der oppføringer kan leses, men ikke tildeles på nytt via indeksen.

interface Scores {
  readonly [name: string]: number;
}
const scores: Scores = { ada: 95, sam: 88 };
console.log(scores.ada);
// scores.ada = 100; // Error

Kort sjekk

Test forståelsen din av readonly-egenskaper.

Oppsummering: readonly-egenskaper

Du har lært at readonly:

  • Lar en egenskap angis én gang, og blokkerer deretter ny tildeling.
  • Kan angis ved deklarasjonen eller i konstruktøren for klassefelt.
  • Gjelder bare ved kompilering og er overflatisk — det fryser ikke nestede data fullstendig.
  • Skiller seg fra const: det ene beskytter egenskaper, det andre beskytter variabelbindinger.

Deretter ser vi på readonly-arrayer og tupler.

interface Meta { readonly id: number; }
const m: Meta = { id: 42 };
console.log(m.id);
Gratis å komme i gang

Lær deg TypeScript med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
101
Leksjoner
352

Ofte stilte spørsmål

Er leksjonen «readonly-egenskaper» gratis?

Ja – hele teksten i «readonly-egenskaper» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av TypeScript Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i TypeScript Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «readonly-egenskaper»?

Merk objektegenskaper som uforanderlige etter initialisering. Du øver på TypeScript Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med TypeScript Academy?

Ingen tidligere erfaring er nødvendig. TypeScript Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.

Hvor lang tid tar leksjonen «readonly-egenskaper»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne TypeScript Academy-leksjonen?

Ja. Alle TypeScript Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. readonly-egenskaper
  2. readonly-arrayer og tupler
  3. ReadonlyArray og ReadonlyMap
  4. Mønstre for dyp uforanderlighet
← Tilbake til TypeScript Academy