2017-03-26 4 views
1

ネイティブの角度サービスを拡張するクラスを作成し、それをオーバーライドするためにクラスプロバイダを使用しました。useClassプロバイダで正しいintellisenseを取得する方法

拡張サービス

@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 
} 

の一部は、しかし、私のコンポーネントでインテリセンスはまだ私は古い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

静的型情報のみFormBuilderを導出することを可能にします。 「知っている」場合は、実行時には実際にはExtendedFormBuilderになります。キャストすることができます。

class MyComponent { 
    ExtendedFormBuilder fb; 
    constructor(fb:FormBuilder) { 
    this.fb = fb as ExtendedFormBuilder; 
    } 
関連する問題