2017-08-04 1 views
1

Ich versuche, der moment.js-Bibliothek zusätzliche Funktionen hinzuzufügen. Ich möchte eine Funktion hinzufügen, die selbst einen Moment() in ihrem Körper erfordert, und es fällt mir schwer, dies herauszufinden.Typoskript: Hinzufügen einer Funktion zum momentum.js-Namespace

Ich verwende die neueste Version von Typescript und moment.js. Ich habe versucht, eine Lösung zu finden, aber ich habe nichts gefunden. Diese Lösung (Typescript: add function to momentjs' prototype) ist schon fast in Betrieb, denke ich, aber immer noch nichts.

Bisher, was ich habe ist:

import * as moment from 'moment'; 

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

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

Ich bin nicht sicher, wohin ich gehe falsch, aber wenn ich versuche, den Moment Bibliothek zu verwenden und myFunc Ich dachte Moment importieren (Import * als Moment aus 'moment') wäre genug aber myFunc wird nicht erkannt, nur der Standardmoment funktioniert.

Ex. Dies sagt, dass myFunc() nicht erkannt wird.

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

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

Irgendwelche Vorschläge, wie Sie dies zum Funktionieren bringen können?

+0

weil 'myFunc' nicht in' moment' Sie nicht existiert – Aravind

+1

sollte Ihren eigenen "Moment" -Typ importieren, nicht den von "Moment" exportierten. Also ändere 'import * als Moment von 'moment' 'zu' import * als Moment von'./Moment-extended'' oder so. – csander

+0

Okay, ich habe meinen Code so geändert, wie es @csander vorgeschlagen hat, aber es funktioniert nicht. Mache ich das richtig? Ich importiere '* als Moment von 'Moment' und' * als MyMoment von'./Moment.extended 'im obigen Beispiel und versuche, myFunc folgendermaßen aufzurufen:' myMoment.myFunc() ', aber ich erhalte diesen Fehler: Die Eigenschaft 'myFunc' existiert nicht beim Typ 'typeof' c:/Git /.../ moment.extended '' –

Antwort

1

Sie können moment um Ihre myFunc mit TypeScript erweitern.

Die folgenden Werke für mich (mit Typoskript 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()); 

und Ausgänge:

Called myFunc! 
1501901308611 
+0

Danke, es funktioniert gut. – flow3r

Verwandte Themen