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