我创建了一个扩展原生角度服务的类,并使用类提供程序覆盖它。
扩展服务
@Injectable()
export class ExtendedFormBuilder extends FormBuilder {
control(
formState: any,
validator: any = null,
asyncValidator: any = null,
errorConfig: any = null
): ExtendedFormControl {
return new ExtendedFormControl(formState, validator, asyncValidator, errorConfig);
}
}
app.module
{
provide: FormBuilder,
useClass: ExtendedFormBuilder
}
然而,我的组件中的intellisense仍然认为我使用旧的FormBuilder
类。
this.fb.control('Joe', [
Validators.required,
Validators.minLength(2)
], null, { // Error! `FormBuilder.control` takes only 3 params, not 4.
minLength: 2
})
有没有办法绕过这个,使用提供类?
有一点需要注意的是,代码是有效的。什么是无效的是打字稿类型检查,这使我的代码无法构建。
https://angular.io/docs/ts/latest/cookbook/dependency-injection.html#useclass
答案 0 :(得分:1)
静态类型信息仅允许派生FormBuilder
。如果你“知道”,在运行时它实际上是一个ExtendedFormBuilder
,你可以把它投出来
class MyComponent {
ExtendedFormBuilder fb;
constructor(fb:FormBuilder) {
this.fb = fb as ExtendedFormBuilder;
}