【发布时间】:2017-11-11 16:45:51
【问题描述】:
Angular 通过其 FormBuilder 类引入了模型驱动的表单,其主要方法 group 具有如下签名:
group(controlsConfig: {
[key: string]: any;
}): FormGroup;
any 实际上是一个数组,格式为:
[
initial value of model's property,
sync validator(s),
async validator(s)
]
只需要第一个元素。
我决定我想要一些比这更强类型的东西,特别是与强类型模型相关的任何东西,所以我根据 T 重新定义函数:
declare interface FormBuilder2 extends FormBuilder {
group<T>(controlsConfig: {
[K in keyof T]?: [T[K], ValidatorFn | ValidatorFn[] | null, ValidatorFn | ValidatorFn[] | null];
}): FormGroup;
}
这也意味着我在 HTML 中的所有 formControlNames(当然还有在 group() 调用中)必须匹配模型的属性,这是我更喜欢的。
这似乎有效,但只是为了一个混乱:
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],
});
我必须在未使用的阵列插槽上提供null。
有没有办法让 Typescript 省略对无关 nulls 的需求?
【问题讨论】:
标签: angular generics typescript interface angular2-formbuilder