2017-10-25 5 views
1

FormControlの例を取りますが、モジュール内の任意のコンストラクタメソッドに適用できます。angle FormControlクラスにメソッドを追加

ReactFormの既存のFormControlクラスにメソッドmyMethod(string): FormControlを追加したいとします。

私はそれをこのように行うことができると思った:

import {FormControl} from '@angular/forms'; 

declare module '@angular/forms' { 
    interface FormControl { 
    myMethod(value: string): FormControl; 
    } 
} 

FormControl.prototype.myMethod = function(value) { /*TODO*/ }; 

const formControl = new FormControl('').myMethod('hello'); 

私は純粋javacript、 で働いているだろうが、私はtypescriptですコンパイル時にいくつかの警告やエラーを持っている:

  • ShadowedName:FormControl
  • 'FormControl'はタイプのみを参照しますが、ここで値と​​して使用されます

実際、私は両方のメッセージを理解していると思いますが、ここでどうすればいいですか? 私はそれに公式のスクリプトのドキュメント(https://www.typescriptlang.org/docs/handbook/declaration-merging.html)を読んだが、私と一致するケースを見つけることができません...

ありがとうたくさん!

答えて

1

FormControlは実際には角度を変えて別のモジュールから、つまり増強する必要があります。私はVisual Studio Codeで定義コマンドに移動することでそれを発見しました。また、私はあなたの増加関数にthisパラメータを追加することの自由を取った:

import {FormControl} from '@angular/forms'; 
declare module '@angular/forms/src/model' { 
    interface FormControl { 
    myMethod(value: string): FormControl; 
    } 
} 
FormControl.prototype.myMethod = function(this: FormControl, value: string) { 
    return this; 
}; 
const formControl = new FormControl('').myMethod('hello'); 
+0

最初に私は、私は増強は、既存の宣言のソースとないで行わなければならないことをどこかで読ん、本当に納得していないでした。これは間違いなく正しい答えです。ありがとう –

関連する問題