Ich habe versucht, es mit Typoskript-Bindungen zu verwenden:
npm install moment --save
typings install moment --ambient -- save
test.ts:
import {moment} from 'moment/moment';
Und ohne:
npm install moment --save
test.ts:
var moment = require('moment/moment');
Aber wenn ich moment.format () aufrufe, erhalte ich eine Fehlermeldung. Sollte einfach sein, kann jemand eine Befehlszeilen- / Importkombination bereitstellen, die funktionieren würde?
typescript
angular
Sergey Aldoukhov
quelle
quelle
Antworten:
Update April 2017:
Ab Version 2.13.0 enthält Moment eine Typoskript-Definitionsdatei. https://momentjs.com/docs/#/use-it/typescript/
Installieren Sie es einfach mit npm in Ihrem Konsolentyp
In Ihrer Angular-App ist der Import so einfach:
Das war's, Sie erhalten volle Typescript-Unterstützung!
Bonusbearbeitung: Um eine Variable oder Eigenschaft wie
Moment
in Typescript einzugeben, können Sie dies tun, z.quelle
moment
ist eine globale Ressource eines Drittanbieters. Der Moment, in dem das Objektwindow
im Browser weiterlebt. Daher istimport
es in Ihrer Angular2-Anwendung nicht korrekt . Fügen Sie stattdessen die<script>
Fügen Sie Tag in Ihr HTML ein, das die Datei moment.js lädt.Um TypeScript glücklich zu machen, können Sie hinzufügen
oben in Ihren Dateien, wo Sie es verwenden, um die Kompilierungsfehler zu stoppen, oder Sie können verwenden
Oder verwenden Sie tsd, um die Datei moment.d.ts zu installieren, die TypeScript möglicherweise selbst findet.
Beispiel
Stellen Sie nur sicher, dass Sie das Skript-Tag in Ihrem HTML-Code hinzufügen, da sonst kein Moment vorhanden ist.
Modul laden
moment
Zuerst müssten Sie einen Modullader wie System.js einrichten , um die momentan gemeinsamen Dateien zu laden
Dann, um Moment in die Datei zu importieren, wo nötig
oder
BEARBEITEN:
Bei einigen Bundlern wie Webpack oder SystemJS Builder oder Browserify gibt es auch Optionen, die den Moment vom Fensterobjekt fernhalten. Weitere Informationen hierzu finden Sie auf den jeweiligen Websites.
quelle
System
Modullader wie load in der commonjs-Knotenversion von moment benötigen und dann in der Lage wären, darauf zu verweisen,import * as moment from 'moment';
oderimport moment = require('moment');
die in jeder Hinsicht identisch sind, aber haben einige subtile Unterschiede im Typoskript.typings install moment --ambient -- save
nichttypings
herunter und erstellt den Verweis auf///<reference path="./path/to/moment.d.ts" />
? Ich habe den gleichen Fehler beim Laufennpm run tsc
import
Moment.Folgendes hat bei mir funktioniert.
Installieren Sie zunächst die Typdefinitionen für den Moment.
typings install moment --save
(Hinweis: NICHT
--ambient
)Um das Fehlen eines ordnungsgemäßen Exports zu umgehen:
quelle
import moment from "moment";
stattdessen tun , damit es funktionierte.import * as moment from 'moment';
ist der Schlüssel.Ich würde mit folgendem gehen:
npm install moment --save
Fügen Sie
systemjs.config.js
demmap
Array Ihrer Datei Folgendes hinzu:'moment': 'node_modules/moment'
zum
packages
Array hinzufügen:'moment': { defaultExtension: 'js' }
Verwenden Sie in Ihrer component.ts:
import * as moment from 'moment/moment';
und das ist es. Sie können aus der Klasse Ihrer Komponente Folgendes verwenden:
today: string = moment().format('D MMM YYYY');
quelle
Wir verwenden jetzt Module,
Versuchen
import {MomentModule} from 'angular2-moment/moment.module';
nach dem
npm install angular2-moment
http://ngmodules.org/modules/angular2-moment
quelle
npm install moment --save
,npm install @types/moment --save
stackoverflow.com/questions/35166168/…import * as moment from 'moment';
Um es in einem
Typescript
Projekt zu verwenden, müssen Sie momentan installieren:npm install moment --save
Nach der Installation können Sie es
.ts
nach dem Import in einer beliebigen Datei verwenden:import * as moment from "moment";
quelle
--- Update 11/01/2017
Typings ist jetzt veraltet und wurde durch npm @types ersetzt . Ab sofort sind für das Abrufen von Typdeklarationen außer npm keine Tools mehr erforderlich. Um Moment zu verwenden, müssen Sie die Typdefinitionen nicht über @types installieren da Moment bereits eigene Typdefinitionen bereitstellt.
Es reduziert sich also auf nur 3 Schritte:
1 - Installieren Sie den Moment, der die Typdefinitionen enthält:
2 - Fügen Sie das Skript-Tag in Ihre HTML-Datei ein:
3 - Jetzt können Sie es einfach verwenden. Zeitraum.
--- Ursprüngliche Antwort
Dies kann in nur 3 Schritten erfolgen:
1 - Momentdefinition installieren - * .d.ts Datei:
2 - Fügen Sie das Skript-Tag in Ihre HTML-Datei ein:
3 - Jetzt können Sie es einfach verwenden. Zeitraum.
quelle
declare var moment;
jedoch arbeiten Typisierungen für mich nicht. Nach dem Tippenmoment().
kein Intellisense. Ich vermisse hier wohl ein paar Schritte.Für Angular 7+ (unterstützt auch 8 und 9) :
1: Moment auf Befehl installieren
npm install moment --save
2: Fügen Sie nichts in die
app.module.ts
3: Fügen Sie einfach eine Importanweisung über Ihre
component
oder eine andere Datei wie diese ein:import * as moment from 'moment';
4: Jetzt können Sie
moment
überall in Ihrem Code verwenden. So wie:myDate = moment(someDate).format('MM/DD/YYYY HH:mm');
quelle
import * as moment_ from 'moment'; const moment = moment_;
Sonst bekam ichError: Cannot call a namespace ('moment')
moment_
ist nur ein wörtlicher Name. Es kann alles sein, denke ich ...import * as moment from 'moment';
Beachten Sie jedoch, dass Sie die Größe des Bundles um ~ 500 KB erhöhen. Es gibt einen guten Artikel, der das Problem mit einer Lösung erklärt. Medium.jonasbandi.net/…mit ng CLI
in app.module
in Komponente
Auf diese Weise importieren Sie Moment einmal
UPDATE Angular => 5
Für mich arbeitet in prod mit aot und auch mit universal
Ich benutze nur einen Moment. Moment, den ich bekam
quelle
Parameter 'moment' implicitly has an 'any' type
Fehler.Die Angular2-Moment-Bibliothek enthält Pipes wie {{myDate | amTimeAgo}} zur Verwendung in HTML-Dateien.
Auf dieselben Pipes kann auch als Typescript-Funktion in einer Komponentenklassendatei (.ts) zugegriffen werden. Installieren Sie zuerst die Bibliothek wie angewiesen:
In den node_modules / angle2-moment befinden sich nun ".pipe.d.ts" -Dateien wie calendar.pipe.d.ts , date-format.pipe.d.ts und viele mehr.
Jede dieser Funktionen enthält den Typescript-Funktionsnamen für die entsprechende Pipe. Beispielsweise ist DateFormatPipe () die Funktion für amDateFormatPipe .
Benutzen DateFormatPipe in Ihrem Projekt zu verwenden, importieren Sie es und fügen Sie es Ihren globalen Anbietern in app.module.ts hinzu:
Importieren Sie dann in einer Komponente, in der Sie die Funktion verwenden möchten, sie oben, injizieren Sie sie in den Konstruktor und verwenden Sie:
Befolgen Sie diesen Vorgang, um eine der Funktionen zu verwenden. Es wäre schön, wenn es einen Weg gäbe, auf alle Funktionen zuzugreifen, aber keine der oben genannten Lösungen hat für mich funktioniert.
quelle
Wenn Sie weitere Pakete von Drittanbietern hinzufügen möchten , habe ich die Angular2-Moment- Bibliothek verwendet. Die Installation war ziemlich einfach und Sie sollten die neuesten Anweisungen in der README-Datei befolgen. Infolgedessen habe ich auch Schreibvorgänge installiert .
Hat für mich wie ein Zauber funktioniert und kaum Code hinzugefügt, damit es funktioniert.
quelle
Ich bin mir nicht sicher, ob dies immer noch ein Problem für Menschen ist. Mit SystemJS und MomentJS als Bibliothek wurde es für mich gelöst
Funktioniert gut von dort für mich.
quelle
für angle2 RC5 hat das bei mir funktioniert ...
erster install moment über npm
Importieren Sie dann den Moment in die Komponente, die Sie verwenden möchten
Zuletzt konfigurieren Sie den Moment in systemjs.config.js "map" und "packages".
quelle
import 'moment/locale/de.js';
Danke!Zusätzlich zu SnareChops Antwort musste ich die Typisierungsdatei für momentjs ändern.
In
moment-node.d.ts
ersetzte ich:mit
quelle
Moment.js unterstützt jetzt TypeScript in Version 2.14.1.
Siehe: https://github.com/moment/moment/pull/3280
quelle
Meine eigene Version von Moment in Angular
npm i moment --save
Zuerst Moment importieren als
_moment
, dannmoment
Variable mit Typ_moment.Moment
mit dem Anfangswert von deklarieren_moment()
.Der einfache Import des Moments führt nicht zu einer automatischen Vervollständigung, aber wenn Sie den Moment mit der
Moment
Typschnittstelle aus dem_moment
Namespace aus dem'moment'
Paket deklarieren, das mit dem aufgerufenen Moment-Namespace initialisiert wurde_moment()
Sie die automatische Vervollständigung der Moment-APIs.Ich denke, dies ist die eckigste Art, Moment ohne Verwendung
@types
typings
oder eckige Anbieter zu verwenden, wenn Sie nach einer automatischen Vervollständigung für Vanille-Javascript-Bibliotheken wie Moment suchen.quelle
npm install @types/moment --save
Versuchen Sie,
"allowSyntheticDefaultImports": true
zu Ihrem hinzuzufügentsconfig.json
.Was macht die Flagge?
Dies teilt dem TypeScript-Compiler im Grunde mit, dass es in Ordnung ist, eine ES6-Importanweisung zu verwenden, d. H.
auf einem CommonJS-Modul wie Moment.js, das keinen Standardexport deklariert. Das Flag wirkt sich nur auf die Typprüfung aus, nicht auf den generierten Code.
Dies ist erforderlich, wenn Sie SystemJS als Modullader verwenden. Das Flag wird automatisch aktiviert, wenn Sie Ihrem TS-Compiler mitteilen, dass Sie SystemJS verwenden:
Dadurch werden auch alle von IDEs ausgelösten Fehler entfernt, wenn sie für die Verwendung von konfiguriert sind
tsconfig.json
.quelle
für angle2 mit systemjs und jspm musste man tun:
quelle
Für ANGULAR CLI-Benutzer
Die Verwendung externer Bibliotheken finden Sie in der Dokumentation hier:
https://github.com/angular/angular-cli/wiki/stories-third-party-lib
quelle
Ich habe den Rat befolgt, allowSyntheticDefaultImports (da für mich kein Export von Moment zu Moment möglich ist) mit System zuzulassen. Dann folgte ich dem Rat von jemandem:
Mit dem Moment, der in meiner system.js-Konfiguration abgebildet wird. Die anderen Importanweisungen würden aus irgendeinem Grund für mich nicht funktionieren
quelle
Folgendes hat bei mir funktioniert:
Der Moment-Knoten ist im Typisierungs-Repository nicht vorhanden. Sie müssen zu Definitely Typed umleiten, damit es mit dem Präfix dt funktioniert.
quelle
Mit systemjs habe ich in meiner systemjs.config map for hinzugefügt
moment
Und dann können Sie einfach importieren,
moment
indem Sie einfach tunquelle
Ich weiß, dass es ein alter Thread ist, aber für mich war die einfachste Lösung, die tatsächlich funktioniert hat:
npm install moment --save
quelle