javascript - Typescript: Adaugă o funcție în namespace-ul moment.js


Încerc să adaug funcționalități suplimentare bibliotecii moment.js. Vreau să adaug o funcție care să necesite ea însăși un apel moment() în corpul său și am dificultăți să înțeleg cum să fac asta.

Folosesc cea mai recentă versiune de Typescript și moment.js. Am încercat să găsesc o soluție, dar nu am ajuns la nimic. Această soluție (Typescript: adăugarea unei funcții la prototipul momentjs) s-a apropiat de a funcționa, cred, dar tot nu a reușit.

Până acum, ceea ce am este:

import * as moment from 'moment';

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

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

Nu sunt sigur unde greșesc, dar când încerc să folosesc biblioteca moment și myFunc, am crezut că importul moment (import * as moment from 'moment') ar fi suficient, dar myFunc nu este recunoscut, doar funcțiile standard moment.

Ex. Acesta spune că myFunc() nu este recunoscută.

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

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

Ai vreo sugestie despre cum să fac să meargă asta?

Răspuns #1

Poți extinde moment pentru a include myFunc folosind fuziunea declarațiilor din TypeScript.

Următoarele funcționează pentru mine (folosind 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());

Și rezultatele:

Called myFunc!
1501901308611