2017-12-22 22 views
0

私はチームが使用しているテストスイートにいくつかの機能を追加するモジュールを作成しています。これは、メインのタイスクリプトファイルを持ち、プロジェクトからの他のエクスポートをラップするプロジェクトです。タイピングをモジュールとともにエクスポートするにはどうすればいいですか?

index.d.ts:モジュールの

export * from "./OneModule" 
export * from "./AnotherModule" 

一つChai.jsアサーションライブラリに新しいメソッドを追加する機能を備えています。これは、例えば、新しいメソッドを追加するためにそれの機能を使用することによって達成される:

assertion.addChainableMethod('newMethod', callback, chainCallback) 

expect(something).to.be.newMethod()のような文を書く能力が追加されます。しかし、TypeScriptは、これらの新しいメソッドを認識しません。なぜなら、@types/chaiの型アサーションには明らかにそれらの関数がないからです。

私はこのようなチャイアサーションと合併するためのインタフェース定義を作成しました:

declare namespace Chai { 
    interface Assertion { 
     newMethod(something: string): Assertion; 
     newMethod: Assertion; 
    } 
} 

それはまたそれがプロパティとしての両方を定義する必要があります理由ですexpect(something).to.be.newMethod.equals()としてchainesできるようにaddChainableMethodは、新しいメソッドを追加します方法。

問題は、上の宣言をindex.d.tsにどのように追加しても、インポートするプロジェクトで新しいアサーションは表示されません。私はそれが何とかモジュール名前空間にラップされていると思う(しかし、私はそれについて非常に間違っているかもしれない)。私は@types/newAssertionsを定義してそこに定義することができますが、ユーザーはpackage.jsonに2つのプロジェクトを含める必要があります。同時に2つのプロジェクトを同時に処理する必要があります。私のChai名前空間拡張と私が持っているすべてのモジュールの両方をどのようにエクスポートできますか?

私はやることができた最高のは、そのようなものです:

declare module 'my-module' { 
    function AddNewAssertions(chai: any, utils: any): void; 
} 
declare namespace Chai { 
    interface Assertion { //same as above } 
} 

しかし、これで、私は私の他のモジュールを公開することはできません、それは私がものだけを追加するAddNewAssertions機能を、露光していた場合にのみ機能しますアサーションこれは完璧に動作します。

答えて

1

私は、このために非常に基本的なテストアプリケーションをノックし、私は追加することで、いくつかの成功を持っていた:

declare global { 
    namespace Chai { 
     interface Assertion { 
      newMethod(something: string): Assertion; 
      newMethod: Assertion; 
     } 
    } 
} 

これはあなたの他のモジュールでは見え拡張子、宣言を持つだけではなく1になります。

関連する問題