TypeScript Academy · Les

Vereiste stappen afdwingen

Voorkom build() totdat alle verplichte velden zijn ingesteld

Les 3 van 413 stappen

Vereiste stappen afdwingen is een gratis TypeScript Academy-les op CoddyKit. Dit is les 3 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject TypeScript Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus TypeScript Academy bevat in totaal 4 lessen.

Te vroeg aanroepen van build() voorkomen

Nu gebruiken we de opgebouwde toestand om het aanroepen van build() te verbieden totdat de vereiste velden zijn ingesteld. Het typesysteem, niet een controle tijdens de uitvoering, blokkeert een onvolledige opbouw.

De uiteindelijke structuur definiëren

Begin met het declareren van het volledige object en de sleutels die verplicht zijn. De bouwer staat build() alleen toe wanneer de toestand al deze sleutels bevat.

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

De conditionele signatuur van build

We maken build alleen beschikbaar wanneer de opgebouwde toestand S de vereiste sleutels bevat. Een conditioneel type retourneert de echte methode of een onbruikbare variant.

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

De parameter this gebruiken

De parameter this: Builder<Required> beperkt welke builderinstanties build mogen aanroepen. Als S niet voldoet aan Required, is de aanroep een typefout.

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

Instelmethoden aan toestand koppelen

Elke instelmethode verbreedt S zoals eerder. Nadat beide verplichte instelmethoden zijn uitgevoerd, breidt S eindelijk Required uit en kan build worden aangeroepen.

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; }
}

Het succesvolle pad compileert

Wanneer beide vereiste stappen aanwezig zijn, wordt de keten door de typecontrole geaccepteerd en uitgevoerd. De compiler weet zeker dat S elke vereiste sleutel bevat.

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

Het mislukte pad faalt

Laat je een vereiste stap weg, dan wordt build() niet langer door de typecontrole geaccepteerd, omdat de S van de bouwer Required niet uitbreidt. De fout wordt tijdens het compileren gevonden.

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

Waarom dit beter is dan controles tijdens de uitvoering

Een controle tijdens de uitvoering met if (!this.url) throw faalt pas wanneer de code wordt uitgevoerd. De aanpak met de parameter this faalt al tijdens de typecontrole, zodat onvolledige opbouw nooit wordt uitgebracht.

Optionele velden blijven optioneel

Optionele stappen zoals timeout maken nooit deel uit van Required en bepalen dus niet of build() mag worden aangeroepen. Je kunt ze naar wens opnemen of overslaan.

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

Opschalen naar veel vereisten

Voeg meer verplichte sleutels toe aan de structuur van Required en aan de parameter this, waarna de compiler ze allemaal afdwingt. Dit patroon schaalt naar elk aantal vereiste stappen.

Beperkingen

De garantie hangt ervan af dat je S consequent door elke instelmethode doorgeeft en typetechniek met de parameter this gebruikt. Typeconversies moeten beperkt blijven tot de instelmethoden, zodat aanroepers volledig typeveilig blijven.

Korte controle

Korte controle over deze les.

Samenvatting

Om vereiste stappen af te dwingen, typ je build met een parameter this: Builder<Required>. De methode wordt pas door de typecontrole geaccepteerd wanneer de opgebouwde toestand S elke vereiste sleutel bevat. Zo wordt onvolledige opbouw een compilatiefout.

Gratis beginnen

Leer TypeScript met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
101
Lessen
352

Veelgestelde vragen

Is de les “Vereiste stappen afdwingen” gratis?

Ja — de volledige tekst van “Vereiste stappen afdwingen” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus TypeScript Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus TypeScript Academy bevat in totaal 4 lessen.

Wat leer ik in “Vereiste stappen afdwingen”?

Voorkom build() totdat alle verplichte velden zijn ingesteld Je oefent met TypeScript Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met TypeScript Academy te beginnen?

Ervaring vooraf is niet nodig. TypeScript Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.

Hoe lang duurt de les “Vereiste stappen afdwingen”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over TypeScript Academy?

Ja. Elke les over TypeScript Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Basisprincipes van het Builder Pattern
  2. Fluent interfaces met typen
  3. Vereiste stappen afdwingen
  4. Onveranderlijke builders
← Terug naar TypeScript Academy