SystemJS - 时刻不是一个功能

ees*_*ein 32 javascript angularjs momentjs systemjs

我使用JSPM,AngularJS,TypeScript,SystemJSES6我的项目运行非常好......除非我尝试使用momentJS.

这是我得到的错误:

TypeError:时刻不是函数

这是代码的一部分:

import * as moment from 'moment';
Run Code Online (Sandbox Code Playgroud)

更多:

var momentInstance = moment(value);
Run Code Online (Sandbox Code Playgroud)

如果我调试它,时刻是一个对象而不是一个函数:

在此输入图像描述

这就是我的moment.js JSPM包的样子:

module.exports = require("npm:moment@2.11.0/moment.js");
Run Code Online (Sandbox Code Playgroud)

我已经阅读了很多,找不到解决这个问题的方法......任何想法?

我读过/试过的一些事情:

如何在TypeScript中使用带有SystemJS的momentjs?

https://github.com/angular-ui/ui-calendar/issues/154

https://github.com/jkuri/ng2-datepicker/issues/5

momentJS上的打字稿模块系统行为奇怪

https://github.com/dbushell/Pikaday/issues/153

谢谢!

Oka*_*Oka 59

只需* as从import语句中删除grouping():

import moment from 'moment';
Run Code Online (Sandbox Code Playgroud)

如果不深入挖掘源代码,它moment通常会导出一个函数,它附加了各种方法和其他属性.

通过使用* as,您可以有效地抓取所有这些属性并将它们附加到对象,从而破坏原始功能.相反,您只需要export default主导出(在ES6中,module.exportsNode.js中的对象).

或者,你可以做到

import moment, * as moments from 'moment';
Run Code Online (Sandbox Code Playgroud)

获取当前函数as moment,以及调用的对象上的所有其他属性moments.将ES5导出这样的ES5导出转换为ES6样式时,这moment会有点不太明显,因为它会保留相同的属性.

  • 我也试过`import*as moment from'moment'`这给了我"时刻不是函数"的错误.按照你的建议"从'瞬间'导入时刻'更改它只是将错误更改为"moment_1.default不是函数".这里发生了什么?(似乎改变导入的方式导致typescript将我的`moment()`函数调用编译成`moment_1.default`函数调用.) (2认同)