2017-08-04 1 views
1

私はmoment.jsライブラリに特別な機能を追加しようとしています。私は、本体にモーメント()呼び出しが必要な関数を追加したいと思います。これを考え出すのは難しいです。Typescript:moment.js名前空間に関数を追加する

私はTypescriptとmoment.jsの最新バージョンを使用しています。私は解決策を見つけようとしましたが、何も出てこなかった。この解決法(Typescript: add function to momentjs' prototype)は、仕事に近いところに来ていると思いますが、まだ何もありません。

は、これまでのところ私が持っているものである :

import * as moment from 'moment'; 

export namespace moment{ 
    interface Moment{ 
     myFunc(): boolean; 
    } 
} 

(moment as any).fn.myFunc = function() { 
    return moment(....); 
}; 

私は私が間違っているつもりだどこか分からないが、私は瞬間ライブラリを使用しようとmyFuncというときに私はから瞬間としてモーメント(インポート*をインポートすると思いました'moment')でも十分ですが、myFuncは認識されず、標準モーメント関数だけが認識されます。

Ex。これはmyFunc()が認識されないことを示します。

import * as moment from 'moment' 
import Moment = moment.Moment 

... moment().add(...) //works 
... moment().myFunc() // doesn't recognize myFunc() 

これを動作させる方法についてのご意見はありますか?

+0

'myFunc'はmoment' – Aravind

+1

あなた'に存在していないため、 「瞬間」によって輸出されたものではなく、あなた自身の「瞬間」型を輸入すべきです。だから、「瞬間」から「瞬間として輸入する」、「瞬間を延長する」などのように、「輸入*」を変更します。 – csander

+0

だから、@cansanderがどのように示唆したのかをコードに変更しましたが、うまくいきません。私はこの権利をしていますか? myMoment.myFunc() 'のようにmyFuncを呼び出そうとしますが、私はこのエラーを受け取ります:プロパティ 'myFunc'はタイプ 'typeof "に存在しませんc:/ Git /.../memory.extended"' –

答えて

1

には、myFuncを含めることができます。これには、TypeScriptのdeclaration mergingを使用します。

(活字体2.4.2を使用して)私にとっては、次の作品:

import * as moment from 'moment'; 

declare module "moment" { 
    interface Moment { 
    myFunc(): moment.Moment; 
    } 
} 

(moment as any).fn.myFunc = function(): moment.Moment { 
    console.log("Called myFunc!"); 
    return moment(); 
}; 

console.log(moment().myFunc().valueOf()); 

と出力を:

Called myFunc! 
1501901308611 
+0

ありがとうございます、うまくいきます。 – flow3r

関連する問題