Typescript:将函数添加到 moment.js 命名空间

J. *_*Doe 6 javascript momentjs typescript angular

我正在尝试向 moment.js 库添加额外的功能。我想添加一个函数,它本身需要在其主体中调用 moment() ,但我很难弄清楚这一点。

我正在使用最新版本的 Typescript 和 moment.js。我试图找到解决方案,但一无所获。我认为这个解决方案(Typescript:向 momentjs 原型添加函数)已经接近工作,但仍然没有任何效果。

到目前为止我所拥有的是:

import * as moment from 'moment';

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

(moment as any).fn.myFunc = function() {
    return moment(....);
};
Run Code Online (Sandbox Code Playgroud)

我不确定我哪里出错了,但是当我尝试使用 moment 库和 myFunc 时,我认为导入 moment (import * as moment from 'moment')就足够了,但 myFunc 无法识别,只能识别标准时刻功能。

前任。这表示 myFunc() 未被识别。

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

... moment().add(...) //works
... moment().myFunc() // doesn't recognize myFunc()
Run Code Online (Sandbox Code Playgroud)

关于如何让它发挥作用有什么建议吗?

car*_*ant 7

您可以扩展moment以包含您myFunc使用 TypeScript 的声明合并

以下对我有用(使用 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());
Run Code Online (Sandbox Code Playgroud)

并输出:

Called myFunc!
1501901308611
Run Code Online (Sandbox Code Playgroud)