2016-10-21 7 views
7

W porządku, moje pierwsze pytanie na temat SO, jak ekscytujące! :)Definicja typu MomentJS z Typsem 2.0

Próbuję uzyskać definicje MomentJS do pracy z Typescript 2.0.

Nie mam problemów z uzyskaniem definicji angularnych, po prostu wykonując npm install @types/angular --save-dev.

Jednak MomentJS (2.15.1) jest już dostarczany z moment.d.ts jako część pakietu, który otrzymasz po zainstalowaniu.

Jeśli spróbujesz zrobić podobne podejście do kątowe, tj npm install @types/moment --save-dev, to co można dostać:

npm WARN przestarzałe @ rodzai/momentu @ 2.13.0: Jest to definicja typu stub dla Chwili (https://github.com/moment/moment). Moment zapewnia własne definicje typów, więc nie potrzebujesz zainstalowanych @ typów/chwil!

I na pewno wystarczy, jeśli przejdziesz do node_modules\@types\moment, nie ma w tym nic przydatnego.

Tak, dodałem plik tsconfig.json do mojego folderu głównego, więc Typescript 2.0 automatycznie pobierze @ typy na module node_modules (to dlatego gra Angular działa poprawnie), ale dla MomentJS otrzymuję błąd poniżej (od. d.ts nie znajduje się w miejscu, w którym TS2 tego oczekuje):

TS2304 Nie można znaleźć nazwy "moment".

Próbowałem także bawić się z konfiguracją "typeRoots" na tsconfig.json bez powodzenia.

Jest to istotne kawałek mojego package.json:

{ 
    "devDependencies": { 
    "@types/angular": "^1.5.16" 
    }, 
    "dependencies": { 
     "moment": "^2.15.1" 
    } 
} 

Używam VS2015, jeśli ma to znaczenie.

Więc ... Jakieś pomysły, jak zdobyć Maszynopis 2.0, aby przeczytać definicję typu Momentu, która znajduje się w "nieoczekiwanym" folderze?

+2

Mam ten sam problem, nie można znaleźć rozwiązania? – Joshua

+2

Ja też mam ten problem – mosesfetters

+2

Mając ten sam problem, na chwilę obecną nie mogę znaleźć poprawki – Jochen

Odpowiedz

3

znalazłem gdzieś indziej (ale nie pamiętam gdzie), że należy

moment.d.ts zmian poprzez zastąpienie oświadczenie eksportowej z

declare module 'moment' { 
    export default moment; 
} 

dodać obojętne fixmoment.ts plik na dysku projekt z następującą linią:

Kompilowanie z tsc bezpośrednio kompiluje teraz wszystkie pliki. Niestety VS2015 nadal daje błąd tsc: błąd TS2688: Kompilacja: Nie można znaleźć pliku definicji typu dla "momentu". której nie rozumiem.

+0

Oto odnośnik: https://github.com/DefinitelyTyped/DefinitelyTyped/issues/11864 OP wątku _seems_, który mógł zostać rozwiązany przez NIE dodawanie hacka. Jednak żaden z kroków wymienionych w wątku nie działa dla mnie. Obejście jest nadal do zrobienia, jak stwierdza @rekna. – user1821052

+0

import * as moment ... nie działał dla mnie, ale taki odnośnik działał: /// <ścieżka referencyjna = "../ wwwroot/lib/moment/moment.d.ts" /> – hlo

1

Miałem ten sam problem. Przeczytałem to comment i dodałem declare var moment; do custom-typings.d.ts. to działało dobrze, ale nie rozumiem dlaczego.

VS2015 SP3 + TypeScript2.0.6.0, projekt oparty na pakiecie kątowym2-webpack-starter.

4

Znajdziesz plik pod numerem node_modules\moment, ponieważ jest on pakowany z samą chwilą.

W wersjach VS 2017 i TypeScript 2.2 nie trzeba podawać typeRoots; Jednak środowisko mogą wymagać określenia dwóch lub więcej z nich, takie jak:

typeRoots: [ 'node_modules/@types/', 'node_modules/moment/' ]

^zapomnę jeśli każdy podkatalog @types wymagany wpis w typeRoots.

to 2,2 bez specjalnych zmian tsconfig.json proces używam w VS 2017 i maszynopis (ale to rzeczy zmieniło się w nowszych wersjach):

Jest automatycznie znaleźć za pośrednictwem ES6 stylu importu:

import * as moment from "moment";

To będzie importować funkcji nazwanych moment jak również nazw moment połączyła w jeden alias.

Jeśli też chcesz (typ zwracany) Moment importowaną, należy wykonać następujące czynności, a także:

import { Moment } from "moment";

W obecnej moment.d.ts (2.18.1), ten typ jest inaczej niedostępne.

W przeszłości używałem var moment = require("moment"); ale to może nie być możliwe w konfiguracji, chyba że używasz browserify lub requirejs do konwersji CommonJS/AMD -Style wymagać czegoś przeglądarka obsługuje.

0

wykonując następujące czynności w pliku customer-typings.d.ts pracował dla mnie

///<reference path="node_modules/moment/moment.d.ts"/> 
import moment = Moment; 
declare const moment: Moment; 

I nawet nie trzeba wprowadzać żadnych zmian do ts tsconfig.json plik