Подтвердить что ты не робот

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

Спасибо!

4b9b3361

Ответ 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 сохранит те же свойства.