TypeScript Academy · leksjon

Håndheve obligatoriske trinn

Forhindre build() før alle obligatoriske felt er satt.

Leksjon 3 av 413 trinn

Håndheve obligatoriske trinn er en gratis leksjon i TypeScript Academy på CoddyKit. Dette er leksjon 3 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.

Hindre for tidlig build()

Nå bruker vi den akkumulerte tilstanden til å hindre kall til build() før de obligatoriske feltene er satt. Typesystemet, ikke en kontroll ved kjøring, blokkerer et ufullstendig bygg.

Definer den endelige strukturen

Start med å deklarere hele objektet og angi hvilke nøkler som er obligatoriske. Builderen tillater bare build() når tilstanden inneholder dem alle.

interface Config {
  url: string;   // required
  method: string; // required
  timeout?: number; // optional
}
type Required = { url: string; method: string };

Betinget build-signatur

Vi gjør build tilgjengelig bare når den akkumulerte tilstanden S utvider de obligatoriske nøklene. En betinget type returnerer den faktiske metoden eller en metode som ikke kan brukes.

class Builder<S> {
  build(this: Builder<Required>): Config {
    return this.d as Config;
  }
  private d: Record<string, unknown> = {};
}

Bruk av this-parameteren

Parameteren this: Builder<Required> begrenser hvilke builder-instanser som kan kalle build. Hvis S ikke oppfyller Required, blir kallet en typefeil.

// Only a Builder whose S includes url and method
// can legally invoke build().

Koble setterne til tilstanden

Hver setter utvider S som før. Når begge obligatoriske setterne er kjørt, utvider S endelig Required, og build kan kalles.

class Builder<S> {
  private d: Record<string, unknown> = {};
  url(u: string): Builder<S & { url: string }> { this.d.url = u; return this as any; }
  method(m: string): Builder<S & { method: string }> { this.d.method = m; return this as any; }
  build(this: Builder<{ url: string; method: string }>): Config { return this.d as Config; }
}

Den gyldige banen kompilerer

Når begge obligatoriske trinn er med, består kjeden typesjekken og kan kjøres. Kompilatoren er tilfreds med at S inkluderer alle obligatoriske nøkler.

const cfg = new Builder<{}>().url("/x").method("GET").build();
console.log(cfg.url, cfg.method);

Den ugyldige banen feiler

Hvis et obligatorisk trinn utelates, blir build() ikke lenger typesjekket, fordi builderens S ikke utvider Required. Feilen oppdages ved kompilering.

// const bad = new Builder<{}>().url("/x").build();
// Error: 'build' can only be called when method is set too.

Hvorfor dette er bedre enn kontroller ved kjøring

En kontroll ved kjøring som if (!this.url) throw feiler først når koden kjøres. Tilnærmingen med this-parameteren feiler under typesjekkingen, slik at ufullstendige bygg aldri leveres.

Valgfrie felt forblir valgfrie

Valgfrie trinn som timeout er aldri en del av Required, så de avgjør ikke om build() kan kalles. De kan tas med eller hoppes over etter behov.

const ok = new Builder<{}>().method("PUT").url("/y").build();
console.log("order of required steps does not matter");

Skaler til mange krav

Legg til flere obligatoriske nøkler i strukturen Required og i this-parameteren, så håndhever kompilatoren dem alle. Mønsteret kan skaleres til et hvilket som helst antall obligatoriske trinn.

Begrensninger

Garantien avhenger av at S føres korrekt gjennom hver setter, og at typing med this-parameter brukes. Cast må begrenses til setterne, slik at kallere forblir fullt typesikre.

Kort sjekk

Kort sjekk av denne leksjonen.

Oppsummering

For å håndheve obligatoriske trinn typesettes build med en this: Builder<Required>-parameter. Metoden består først av typesjekken når den akkumulerte tilstanden S inkluderer alle obligatoriske nøkler, slik at ufullstendig konstruksjon blir en kompileringsfeil.

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 «Håndheve obligatoriske trinn» gratis?

Ja – hele teksten i «Håndheve obligatoriske trinn» 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 «Håndheve obligatoriske trinn»?

Forhindre build() før alle obligatoriske felt er satt. 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 3 av 4.

Hvor lang tid tar leksjonen «Håndheve obligatoriske trinn»?

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. Grunnleggende Builder Pattern
  2. Fluent-grensesnitt med typer
  3. Håndheve obligatoriske trinn
  4. Uforanderlige byggere
← Tilbake til TypeScript Academy