2017-08-04 57 views
1

我試圖給moment.js庫添加額外的功能。我想添加一個函數,它本身需要在它的body中調用一個()函數,而我很難弄明白這一點。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的我想此刻進口(進口*爲時刻'時刻')就足夠了,但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

你應該導入你自己的'moment'類型,而不是'moment'導出的類型。因此,將'import *'從'moment''時刻改爲'import *'作爲'。moment/extended''之類的時刻。 – csander

+0

好吧,我將代碼更改爲@csander建議的方式,但不起作用。我做對了嗎?在上面的例子中,我從'moment'和'* as myMoment從'./ moment.extended'導入'*作爲時刻,我試圖像這樣調用myFunc:'myMoment.myFunc()',但是我得到這個錯誤:屬性'myFunc'在類型'typeof「c:/ Git /.../ moment.extended''上不存在'' –

回答

1

您可以使用TypeScript的declaration merging擴展moment以包含您的myFunc

對我來說,下面的工作(使用打字稿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

相關問題