如何使用useClass提供程序获得正确的intellisense

时间:2017-03-26 10:34:57

标签: angular typescript

我创建了一个扩展原生角度服务的类,并使用类提供程序覆盖它。

扩展服务

@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

1 个答案:

答案 0 :(得分:1)

静态类型信息仅允许派生FormBuilder。如果你“知道”,在运行时它实际上是一个ExtendedFormBuilder,你可以把它投出来

class MyComponent {
  ExtendedFormBuilder fb;
  constructor(fb:FormBuilder) {
    this.fb = fb as ExtendedFormBuilder;
  }