2015-10-05 18 views
19

私のTypeScriptプロジェクトでは、外部のjs依存関係にDefinitelyTyped定義を使用します。.d.tsファイルで定義された拡張インターフェイス

これらの定義が古くなっていることがあります。また、カスタムバリデータ関数を定義できるexpress-validatorのように、ライブラリによっては実行時に新しいメソッドを追加できるライブラリよりも発生する可能性があります。

したがって、これらの定義を拡張して新しいメソッドやプロパティを追加したいと考えています。

だから私は持っている場合express-validator.d.tsの私DefinitelyTypedのdefininiton:

declare module ExpressValidator { 
    export interface Validator { 
    is(): Validator; 
    not(): Validator; 
    isEmail(): Validator; 
    ... 
    } 
} 

は、どのように私は、例えば、内Validatorインタフェースを拡張することができ、私のapplication.ts?でIsArray()メソッドを追加検証インタフェースを拡張する方法

///<reference path='../typings/tsd.d.ts' /> 

import expressValidator = require('express-validator'); 
export var app = express(); 

app.use(expressValidator({ 
    customValidators: { 
     isArray: function(value) { 
      return Array.isArray(value); 
     } 
} 
})); 

// How to extend Validator interface adding isArray() method?? 

答えて

20

//?

あなたはモジュールsome guidance here)であり、あなたがimport expressValidatorを持っているので、あなたのファイルがモジュールであるファイルでこれを行うことはできません。

代わりextendedValidator.d.tsを作成し、活字体のエンジンのために新しいものを追加します。

declare module ExpressValidator { 
    export interface Validator { 
    isArray: any; 
    } 
} 
+1

あなたはそれが作成されると、 'd.ts'ファイルで特定の何かをする必要がありますか?私はこれをしたが、私はまだ私の新しいプロパティが存在しないというエラーを取得します。私はそれを特定の場所に置く必要がありますか、それをコンパイラが認識させるために何か他のことをしなければなりませんか? – WillyC

+0

@basaratインターフェイスを「エクスポート」する必要はありますか?それは必要ですか?あなたが輸出しないとどうなりますか? –

+0

@MohamedNuurを公開するには、エクスポートする必要があります。 –

関連する問題