2016-05-21 12 views
5

Ich entwickle Web-Anwendung mit Knockout in VisualStudio. Ich habe gerade Knockout über Bower installiert, inkl. D.ts Datei im Projekt, inklusive Skript zur HTML Seite und jetzt kann ich Zugang zu ko bekommen.Moment.js + TypeScript. Name Moment nicht gefunden

Jetzt versuche ich moment.js zu verwenden. Wie mit Knockout: installieren, d.ts einbinden, Skript zur Seite einbinden und ich bekomme einen Fehler cannot find name 'moment'. Hinzufügen von Verweis auf D.ts hilft nicht, import * as moment from 'moment' erhalten einen Fehler can not find module moment.

Ich weiß, dass es ein dummes Problem ist, aber ich kann es nicht beheben. Was mache ich falsch?

+0

I Bower verwendet für das Erhalten moment.js (v 2.13) und (zumindest) für diese Version gibt es nicht in Ordnung war '.d. ts 'Datei in geladenen Haufen von Dateien. Sie müssen nur die richtige '.d.ts' Datei erhalten und alles wird in Ordnung sein. – user3272018

Antwort

3

Was ich empfehlen würde, ist ein Tool zum Verwalten Ihrer Definitionen zu verwenden. Einige beliebte Optionen (Sie müssen nicht beide brauchen, nur eine Auswahl):

  1. tsd - npm i -g tsd
  2. typings - npm i -g typings

Diese arbeiten in ähnlicher Weise wie Paketmanager. Sie können Ihre Definitionen installieren, wie zB npm/bower installiert Ihre Abhängigkeiten.

Sobald Sie eine dieser installiert haben, um Ihr Projekt gehen und installieren Moment + seine Definition

npm install moment --save 

Und eine davon:

tsd install moment --save 
typings install moment --save --ambient 

Beide werden einen Ordner erstellen mit Ihrem Definitionen darin (beide nennen es Typings), und beide haben eine "Regenschirm" -Definitionsdatei darin, auf die Sie im Einstiegspunkt Ihrer Anwendung verweisen sollten (zuerst ist für tsd, Sekunde für Typings):

/// <reference path="typings/tsd.d.ts" /> 
/// <reference path="typings/index.d.ts" /> 

Nachdem dies geschehen ist, können Sie vor (oder ein anderes Modul) verwenden, wie Sie es:

import * as moment from 'moment' 
moment.isDate("I'm not a date") 

Ich schlage vor, Check out diese:

https://github.com/DefinitelyTyped/tsd
https://github.com/typings/typings

+1

Ab TypeScript 2.0 kann dies ohne 'tsd' oder' typings' erfolgen, siehe: https://blogs.msdn.microsoft.com/typescript/2016/06/15/the-future-of-declaration-files/ – tjrobinson

+0

Ich bin nicht davon überzeugt, dass dies die beste (oder zumindest nicht die einzige) Antwort ist - Rauls Antwort unten behob das Problem für mich. –

3

In Mein Fall, schließlich diesen Fehler gelöst, indem Sie Folgendes tun:

  1. Diese Option hinzufügen "allowSyntheticDefaultImports": true, im compilerOptions Abschnitt der tsconfig.json Datei (EDITED: Als moment doc. Sais in der Hinweis:If you have trouble importing moment, try add "allowSyntheticDefaultImports": true in compilerOptions in your tsconfig.json file.)
  2. Fügen Sie auch "moduleResolution": "node" in der gleichen compilerOptions Abschnitt hinzu. (Gefunden diese Option suchen rund um die Web)
  3. Importieren Moment Modul wie diese import * as moment from 'moment';
+1

Danke. Ich hatte (1) in der Momentdokumentation gefunden, aber alleine reichte es nicht aus - nachdem ich es getan hatte (2), fing es an zu arbeiten. –

+0

@BartRead Ich habe die Antwort bearbeitet und den Link zum Moment doc zur Verfügung gestellt, wenn es heißt, wenn es nicht funktioniert, versuche '' allowSyntheticDefaultImports ": true' –

+0

Nice one - thanks! –