Я пытался использовать его с привязками машинописи:
npm install moment --save
typings install moment --ambient -- save
test.ts:
import {moment} from 'moment/moment';
И без:
npm install moment --save
test.ts:
var moment = require('moment/moment');
Но когда я вызываю moment.format (), я получаю сообщение об ошибке. Должно быть просто, кто-нибудь может предоставить комбинацию командной строки / импорта, которая будет работать?
typescript
angular
Сергей Алдоухов
источник
источник
Ответы:
Обновление апрель 2017:
Начиная с версии 2.13.0, Moment включает файл определения машинописи. https://momentjs.com/docs/#/use-it/typescript/
Просто установите его с помощью npm, в вашей консоли типа
И затем в вашем приложении Angular импортировать так просто:
Вот и все, вы получаете полную поддержку Typescript!
Бонусное редактирование: чтобы ввести переменную или свойство, как
Moment
в Typescript, вы можете сделать это, например:источник
moment
является сторонним глобальным ресурсом. В данный момент объект живетwindow
в браузере. Поэтому это не правильноimport
в вашем приложении angular2. Вместо этого включите<script>
включите в ваш html тег, который будет загружать файл moment.js.Чтобы сделать TypeScript счастливым, вы можете добавить
в верхней части ваших файлов, где вы используете его, чтобы остановить ошибки компиляции, или вы можете использовать
или используйте tsd для установки файла moment.d.ts, который TypeScript может найти самостоятельно.
пример
Просто убедитесь, что добавили тег script в ваш html, или момент не будет существовать.
Загрузка модуля
moment
Сначала вам нужно настроить загрузчик модулей. такой как System.js, чтобы загружать файлы commonjs.
Затем импортировать момент в файл, где необходимо использовать
или
РЕДАКТИРОВАТЬ:
Есть также варианты с некоторыми упаковщиками, такими как Webpack или SystemJS builder или Browserify, которые будут держать момент в стороне от объекта окна. Для получения дополнительной информации об этом, пожалуйста, посетите их соответствующие веб-сайты для обучения.
источник
System
load, в версии момента commonjs для узла, и тогда вы сможете ссылаться на негоimport * as moment from 'moment';
илиimport moment = require('moment');
который для всех намерений и целей идентичен, но имеет некоторые тонкие различия в машинописи.typings install moment --ambient -- save
неtypings
опускает файл определения и не создает ссылку на///<reference path="./path/to/moment.d.ts" />
? У меня та же ошибка при запускеnpm run tsc
import
моменте.Следующее сработало для меня.
Сначала установите определения типа для момента.
typings install moment --save
(Примечание: НЕ
--ambient
)Затем, чтобы обойти отсутствие надлежащего экспорта:
источник
import moment from "moment";
вместо этого, чтобы заставить это работать.import * as moment from 'moment';
это ключ.Я бы пошел со следующим:
npm install moment --save
К массиву вашего
systemjs.config.js
файлаmap
добавьте:'moment': 'node_modules/moment'
к
packages
массиву добавить:'moment': { defaultExtension: 'js' }
В вашем component.ts используйте:
import * as moment from 'moment/moment';
и это все. Вы можете использовать из класса вашего компонента:
today: string = moment().format('D MMM YYYY');
источник
Мы используем модули сейчас,
пытаться
import {MomentModule} from 'angular2-moment/moment.module';
после
npm install angular2-moment
http://ngmodules.org/modules/angular2-moment
источник
npm install moment --save
,npm install @types/moment --save
stackoverflow.com/questions/35166168/…import * as moment from 'moment';
Чтобы использовать его в
Typescript
проекте, вам нужно установить момент:npm install moment --save
После установки вы можете использовать его в любом
.ts
файле после его импорта:import * as moment from "moment";
источник
--- Обновление 01.11.2017
Typings устарела и была заменена на npm @types . Отныне для получения объявлений типов не требуется никаких инструментов, кроме npm. Чтобы использовать Moment, вам не нужно устанавливать определения типов через @types, потому что Moment уже предоставляет свои собственные определения типов.
Таким образом, он сокращается до 3 шагов:
1 - установить момент, который включает определения типа:
2 - Добавьте тег script в ваш HTML-файл:
3 - Теперь вы можете просто использовать его. Период.
--- Оригинальный ответ
Это можно сделать всего за 3 шага:
1 - Установить определение момента - файл * .d.ts :
2 - Добавьте тег script в ваш HTML-файл:
3 - Теперь вы можете просто использовать его. Период.
источник
declare var moment;
, как набор текста не работает для меня. После вводаmoment().
нет смысла. Я предполагаю, что пропускаю несколько шагов здесь.Для угловых 7+ (поддержка 8 и 9 также) :
1: установить момент по команде
npm install moment --save
2: не добавляйте ничего в
app.module.ts
3: Просто добавьте оператор импорта в начало вашего
component
или любого другого файла, подобного этому:import * as moment from 'moment';
4: Теперь вы можете использовать в
moment
любом месте вашего кода. Как:myDate = moment(someDate).format('MM/DD/YYYY HH:mm');
источник
import * as moment_ from 'moment'; const moment = moment_;
противном случае я получаюError: Cannot call a namespace ('moment')
moment_
это просто буквальное имя. Это может быть что угодно, я думаю ...import * as moment from 'moment';
учтите, что увеличьте размер пакета на ~ 500кб. Есть хорошая статья, объясняющая проблему с помощью решения medium.jonasbandi.net/…с нг CLI
в app.module
в компоненте
таким образом, вы импортируете момент один раз
ОБНОВЛЕНИЕ Angular => 5
У меня работает в прод с аот а также с универсал
Я не люблю использовать любой, но используя момент. Момент, который я получил
источник
Parameter 'moment' implicitly has an 'any' type
ошибку.В библиотеке angular2-moment есть каналы типа {{myDate | amTimeAgo}} для использования в файлах .html.
К тем же каналам можно также получить доступ как к функциям Typescript в файле класса компонентов (.ts). Сначала установите библиотеку в соответствии с инструкциями:
В node_modules / angular2-moment теперь будут находиться файлы ".pipe.d.ts", такие как calendar.pipe.d.ts , date-format.pipe.d.ts и многие другие.
Каждый из них содержит имя функции Typescript для эквивалентного канала, например, DateFormatPipe () является функцией для amDateFormatPipe .
Чтобы использовать DateFormatPipe в вашем проекте, импортируйте и добавьте его к вашим глобальным провайдерам в app.module.ts:
Затем в любом компоненте, где вы хотите использовать функцию, импортируйте ее сверху, вставьте в конструктор и используйте:
Чтобы использовать любую из функций, следуйте этому процессу. Было бы хорошо, если бы был один способ получить доступ ко всем функциям, но ни одно из перечисленных выше решений не помогло мне.
источник
Если вы можете добавить дополнительные сторонние пакеты, я использовал библиотеку angular2-moment . Установка была довольно простой, и вы должны следовать последним инструкциям на README. Я также установил набор текста в результате этого.
Работал для меня как шарм, и едва добавил какой-либо код, чтобы он заработал.
источник
Не уверен, если это все еще проблема для людей, однако ... Использование SystemJS и MomentJS в качестве библиотеки, это решило это для меня
Работает хорошо оттуда для меня.
источник
для angular2 RC5 у меня это работало ...
момент первой установки через npm
Затем импортируйте момент в компонент, который вы хотите использовать
наконец, настройте момент в systemjs.config.js "карта" и "пакеты"
источник
import 'moment/locale/de.js';
Спасибо!В дополнение к ответу SnareChop мне пришлось изменить файл для набора моментов.
В
moment-node.d.ts
я заменил:с участием
источник
Moment.js теперь поддерживает TypeScript в v2.14.1.
Смотрите: https://github.com/moment/moment/pull/3280.
источник
Моя собственная версия использования Moment в Angular
npm i moment --save
Сначала импортируйте момент как
_moment
, затем объявитеmoment
переменную с типом_moment.Moment
с начальным значением_moment()
.Простой импорт момента не даст вам никакого автоматического завершения, но если вы объявите момент с типом
Moment
interface из_moment
пространства имен из'moment'
пакета, инициализированного вызванным пространством имен момента_moment()
вы получите автоматическое завершение API моментов.Я думаю, что это самый угловой способ использования момента без использования
@types
typings
провайдеров или угловых провайдеров, если вы ищете автоматическое завершение для таких ванильных библиотек JavaScript, как момент.источник
npm install @types/moment --save
Попробуйте добавить
"allowSyntheticDefaultImports": true
в свойtsconfig.json
.Что делает флаг?
Это в основном говорит компилятору TypeScript, что можно использовать оператор импорта ES6, т.е.
в модуле CommonJS, таком как Moment.js, который не объявляет экспорт по умолчанию. Флаг влияет только на проверку типов, но не на сгенерированный код.
Это необходимо, если вы используете SystemJS в качестве загрузчика модулей. Флаг будет автоматически включен, если вы сообщите компилятору TS, что вы используете SystemJS:
Это также удалит все ошибки, возникшие в IDE, если они настроены на использование
tsconfig.json
.источник
для angular2 с systemjs и jspm пришлось сделать:
источник
Для пользователей ANGULAR CLI
Использование внешних библиотек находится в документации здесь:
https://github.com/angular/angular-cli/wiki/stories-third-party-lib
источник
Я следовал совету разрешить allowSyntheticDefaultImports (поскольку у меня нет экспорта для использования в данный момент), используя System. Тогда я последовал чьему-то совету использовать:
С моментом сопоставления в моей конфигурации system.js. Другие операторы импорта по какой-то причине мне не подойдут
источник
У меня сработало следующее:
Момент-узел не существует в репозитории. Вам нужно перенаправить на Определенно Типизированный, чтобы заставить его работать, используя префикс dt.
источник
Что я сделал с systemjs, то внутри моего systemjs.config я добавил карту для
moment
И тогда вы можете легко импортировать,
moment
просто делаяисточник
Я знаю, что это старая ветка, но для меня самым простым решением, которое действительно сработало, было:
npm install moment --save
источник