2016-08-17 17 views
0

私は、ライブラリ「jsforce」の定義ファイルを持っています。これは、それが独自のes6約束の実装を持っています。 jsforce.Promise自体は、ちょうどes6-promiseの拡張バージョンで、いくつかの追加メソッドが追加されています。私はこれを私のjsforce.d.tsファイルに複製しようとしていて、ロードブロックを打っています。ここでタイプスクリプト定義ファイルのインポートの拡張と名前変更

は私jsforce.d.tsの関連する部分です:

/// <reference path="globals/es6-promise/index" /> 

declare module jsforce { 

    interface JsforcePromise<T> extends Promise<T> { 

     defer(): JsforcePromise.Deferred; 

     fail(onRejected: JsforcePromise.RejectedCallback<T>): JsforcePromise<T>; 

     thenCall(callback?: Callback<T>): JsforcePromise<T>; 

    } 

    export module JsforcePromise { 

     interface PromiseCallback<T> { 

     } 

     interface FulfilledCallback<T, T2> { 

     } 

     interface RejectedCallback<T> { 

     } 

     interface Deferred { 

     } 

    } 

    interface JSForce { 
     ... 
     Promise: JsforcePromise<any>; 
     ... 
    } 

} 

declare module "jsforce" { 
    var jsforce: jsforce.JSForce; 
    export = jsforce; 
} 

と約束の作成:

let p = new jsforce.Promise<any>((res) => { 
    console.log(res); 
}, (err) => { 
    console.error(err); 
}); 

答えて

1

私はグローバルes6-promise宣言を使用しますが、代わりにモジュールのバージョンを使用することはありません。これにより、より多くの制御が可能になり、グローバルな名前空間が汚染されることはありません。 typings install --save es6-promiseはすべきことです。

さらに、Promiseクラスをes6-promiseに拡張したいと思うので、インターフェイスを宣言することはそのトリックを行いません。また、Promiseコンストラクタのコード例は、ビットがiffyのように見えます(jsforceはコンストラクタをes6-promiseよりも優先しますが、詳細は見ていません)。

だからあなたindex.d.tsファイルは次のようになります:

// index.d.ts 
declare namespace JsforcePromise { 
    interface Deferred { 
    someProperty: any 
    } 
} 

declare module "jsforce" { 
    import { Promise as Es6Promise } from 'es6-promise' 

    class Promise<T> extends Es6Promise<T> { 
    fancyPromiseMethod(): JsforcePromise.Deferred 
    } 
} 

は、次に、あなたのプロジェクトの任意の場所にこのコードを使用することができます。

// app.ts 
import * as jsforce from 'jsforce' 

let p = new jsforce.Promise<any>((resolve, reject) => resolve()) 

p.fancyPromiseMethod().someProperty 

質問がありましたら、お知らせください。 jsforce apiの宣言全体を書いている場合は、typings registryにPRを提出することを検討して、他の人にも利益をもたらすことができるようにしてください。

関連する問題