SystemJS - момент не является функцией
Я использую JSPM
, AngularJS
, TypeScript
, SystemJS
и ES6
, и мой проект работает довольно хорошо... если я не попытаюсь использовать momentJS.
Это ошибка, которую я получаю:
TypeError: момент не является функцией
Это часть кода:
import * as moment from 'moment';
Подробнее:
var momentInstance = moment(value);
Если я его отлаживаю, момент - это объект, а не функция:
![введите описание изображения здесь]()
Вот что выглядит мой пакет jsm.js JSPM:
module.exports = require("npm:[email protected]/moment.js");
Я много читал и не мог найти способ решить эту проблему... любые идеи?
Некоторые вещи, которые я прочитал/попробовал:
Как использовать momentjs в TypeScript с SystemJS?
https://github.com/angular-ui/ui-calendar/issues/154
https://github.com/jkuri/ng2-datepicker/issues/5
Typescript системы модулей на момент JJ ведут себя странно
https://github.com/dbushell/Pikaday/issues/153
Спасибо!
Ответы
Ответ 1
Просто удалите группировку (* as
) из оператора импорта:
import moment from 'moment';
Не углубляясь в исходный код , похоже, что moment
обычно экспортирует функцию, к которой приложены всевозможные методы и другие свойства.
Используя * as
, вы эффективно захватываете все эти свойства и привязываете их к новому объекту, уничтожая исходную функцию. Вместо этого вам просто нужен главный экспорт (export default
в ES6, module.exports
объект в Node.js).
В качестве альтернативы вы можете сделать
import moment, * as moments from 'moment';
чтобы получить функцию момента как moment
и все остальные свойства объекта, называемого moments
. Это немного снижает смысл при преобразовании ES5, например, в ES6, потому что moment
сохранит те же свойства.