import { Component, computed, signal } from '@angular/core'; import { FormsModule } from '@angular/forms'; import { HeadingComponent } from '@shared/ui/atoms/heading/heading.component'; import { TextInputComponent } from '@shared/ui/atoms/text-input/text-input.component'; import { parsePostcode } from '@registratie/domain/value-objects/postcode'; import { ConceptCardComponent } from './concept-card.component'; import { SNIPPETS } from './snippets.generated'; import { highlightTs } from './highlight-ts'; /** Section 3: parse, don't validate. After parsing, the TYPE remembers the value is valid. Composition-only; owns its own postcode demo. */ @Component({ selector: 'app-concepts-parse-section', imports: [FormsModule, HeadingComponent, TextInputComponent, ConceptCardComponent], template: ` 3 · Parse, don't validate Na het parsen onthoudt het type dat de waarde geldig is. @let r = parsed(); @if (r.ok) { Postcode ="{{ r.value }}" Een gevalideerde Postcode is een ander type dan een ruwe string. } @else { {{ r.error }} } `, }) export class ParseSection { raw = signal(''); parsed = computed(() => parsePostcode(this.raw())); protected readonly code: Record = { parse: highlightTs(SNIPPETS['parse']) }; protected readonly src: Record = { parse: 'registratie/domain/value-objects/postcode.ts', }; }
Na het parsen onthoudt het type dat de waarde geldig is.
Postcode ="{{ r.value }}"
Een gevalideerde Postcode is een ander type dan een ruwe string.
Postcode
{{ r.error }}