Typescript:向moment.js命名空间添加一个函数

时间:2017-08-04 19:59:33

标签: javascript angular typescript momentjs

我正在尝试为moment.js库添加额外的功能。我想添加一个本身需要在其体内进行moment()调用的函数,并且我很难搞清楚这一点。

我正在使用最新版本的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无法识别,只有标准时刻功能。

实施例。这表示无法识别myFunc()。

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

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

有关如何使其发挥作用的任何建议吗?

1 个答案:

答案 0 :(得分:3)

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

以下适用于我(使用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());

输出:

Called myFunc!
1501901308611