Angular eingeführt Modellgetriebene bildet mit seiner Formbuilder Klasse, deren primäre Methode group
hat eine Signatur wie folgt aus:fester Länge Array mit optionalen Elemente in Maschinenschrift Schnittstelle
group(controlsConfig: {
[key: string]: any;
}): FormGroup;
Die any
ist eigentlich ein Array mit dem Format :
[
initial value of model's property,
sync validator(s),
async validator(s)
]
Wo nur das erste Element benötigt wird.
Ich entscheide ich etwas mehr stark typisiert als die möchten, vor allem auf alles, was mit einem stark typisierte Modell verknüpft ist, so dass ich neu definieren, die Funktion in Bezug auf T:
declare interface FormBuilder2 extends FormBuilder {
group<T>(controlsConfig: {
[K in keyof T]?: [T[K], ValidatorFn | ValidatorFn[] | null, ValidatorFn | ValidatorFn[] | null];
}): FormGroup;
}
Das bedeutet auch, dass alle meine formControlNames im HTML (und natürlich hier im Aufruf von group()) den Eigenschaften des Modells entsprechen müssen, die ich bevorzuge.
Es scheint aber für ein Schlamassel zu arbeiten:
this.optionsForm = this.formBuilder2.group<CustomerModel>({
status: [this.model.status, [Validators.required], null],
lastOrder: [this.model.lastOrder, null, null],
comments: [this.model.comments, null, null],
});
I null
auf den nicht verwendeten Array-Slots zur Verfügung stellen müssen.
Gibt es eine Möglichkeit, Typoskript zu erhalten, um die überflüssigen null
s wegzulassen?
Clever! Und ja, ich wusste, dass zusätzliche Elemente möglich sind, aber das ist akzeptabel. (Auch +1 für mein AsyncValidatorFn Miss.) –