readonly-egenskaper
Merk objektegenskaper som uforanderlige etter initialisering.
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 propertyreadonly 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; // ErrorKort 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);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
- readonly-egenskaper
- readonly-arrayer og tupler
- ReadonlyArray og ReadonlyMap
- Mønstre for dyp uforanderlighet