2 votes

Le manuscrit : Ajouter une fonction à l'espace de nom moment.js

J'essaie d'ajouter une fonctionnalité supplémentaire à la bibliothèque moment.js. Je veux ajouter une fonction qui nécessite elle-même un appel moment() dans son corps et j'ai du mal à trouver une solution.

J'utilise la dernière version de Typescript et de moment.js. J'ai essayé de trouver une solution mais je n'ai rien trouvé. Cette solution ( Typescript : ajouter une fonction au prototype de momentjs ) a failli fonctionner, je pense, mais toujours rien.

Pour l'instant, ce que j'ai, c'est :

import * as moment from 'moment';

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

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

Je ne sais pas où je me trompe, mais lorsque j'essaie d'utiliser la bibliothèque moment et myFunc, je pensais que l'importation de moment (import * as moment from 'moment') serait suffisante, mais myFunc n'est pas reconnue, seulement les fonctions moment standard.

Ex. Cela dit que myFunc() n'est pas reconnu.

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

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

Avez-vous des suggestions sur la manière de faire fonctionner ce système ?

3voto

cartant Points 35253

Vous pouvez étendre moment pour inclure votre myFunc en utilisant l'outil de TypeScript fusion de déclarations .

Ce qui suit fonctionne pour moi (avec TypeScript 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());

Et des sorties :

Called myFunc!
1501901308611

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X