2016-05-21 28 views
5

Sviluppo un'applicazione Web con eliminazione diretta in VisualStudio. Ho appena installato knockout via bower, incluso il file d.ts nel progetto, incluso lo script nella pagina html e ora posso accedere a ko.Moment.js + TypeScript. Impossibile trovare il nome del momento

Ora provo a usare moment.js. Come con knockout: installa, includi d.ts, includi script alla pagina e ricevo un errore cannot find name 'moment'. L'aggiunta di riferimenti a d.ts non aiuta, import * as moment from 'moment' ottiene un errore can not find module moment.

So che si tratta di un problema stupido, ma non riesco a risolverlo. Che cosa sto facendo di sbagliato?

+0

ho usato scrigno per ottenere moment.js (v 2.13) e (almeno) per questa versione non era sbagliato '.d. ts' file nel mazzo di file caricato. Devi solo ottenere il file '.d.ts' corretto e tutto andrà bene. – user3272018

risposta

3

Quello che consiglierei è utilizzare alcuni strumenti per la gestione delle definizioni. Alcune opzioni popolari (non avete bisogno di entrambi, basta scegliere uno):

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

Questi funzionano in modo simile come gestori di pacchetti. Puoi installare le tue definizioni come npm/bower installa le tue dipendenze.

Una volta che avete uno di questi installato, vai al tuo progetto e installare momento + la sua definizione

npm install moment --save 

E uno di questi:

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

Entrambi questi creerà una cartella con il tuo le definizioni in esso contenute (entrambe le chiamano digitazioni) ed entrambe hanno un file di definizione "ombrello", che dovresti fare riferimento nel punto di ingresso della tua applicazione (prima è per tsd, secondo per le digitazioni):

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

Dopo aver fatto questo, è possibile utilizzare momento (o qualsiasi altro modulo) come si farebbe:

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

Suggerisco di verificare questi:

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

+1

A partire da TypeScript 2.0 questo può essere fatto senza 'tsd' o' typings', si veda: https://blogs.msdn.microsoft.com/typescript/2016/06/15/the-future-of-declaration-files/ – tjrobinson

+0

Non sono convinto che questa sia la migliore (o almeno non l'unica) risposta - la risposta di Raul in basso ha risolto il problema per me. –

3

In il mio caso, finalmente ottenere questo errore risolto facendo quanto segue:

  1. Aggiungendo questa opzione "allowSyntheticDefaultImports": true, nella sezione compilerOptions del file tsconfig.json (CURA: Come il moment doc. sais in Nota:If you have trouble importing moment, try add "allowSyntheticDefaultImports": true in compilerOptions in your tsconfig.json file.)
  2. Aggiungere anche nella stessa sezione compilerOptions. (Trovati questa opzione guardando tutto il web)
  3. Importazione modulo momento come questo import * as moment from 'moment';
+1

Grazie. Avevo trovato (1) nel momento della documentazione ma, da solo, non era abbastanza - una volta che avevo fatto (2) ha iniziato a funzionare. –

+0

@BartRead Ho modificato la risposta e fornito il collegamento al momento doc quando viene detto che se non funziona prova '" allowSyntheticDefaultImports ": true' –

+0

Bello - grazie! –

Problemi correlati