Próbowałem użyć go z powiązaniami maszynopisu:
npm install moment --save
typings install moment --ambient -- save
test.ts:
import {moment} from 'moment/moment';
I bez:
npm install moment --save
test.ts:
var moment = require('moment/moment');
Ale kiedy wywołuję moment.format (), pojawia się błąd. Czy powinno być proste, czy ktoś może podać kombinację wiersza polecenia / importu, która działałaby?
typescript
angular
Siergiej Aldoukhov
źródło
źródło
Odpowiedzi:
Aktualizacja kwietnia 2017 r .:
Począwszy od wersji 2.13.0, Moment zawiera plik definicji maszynopisu. https://momentjs.com/docs/#/use-it/typescript/
Po prostu zainstaluj go z npm w swoim typie konsoli
A następnie w aplikacji Angular importowanie jest tak proste:
To wszystko, masz pełną obsługę maszynopisu!
Edycja bonusowa: Aby wpisać zmienną lub właściwość, jak
Moment
w maszynie do pisania, możesz to zrobić np .:źródło
moment
jest globalnym zasobem strony trzeciej. Ten moment trwawindow
w przeglądarce. Dlatego nie jest to poprawneimport
w twojej aplikacji angular2. Zamiast tego umieść<script>
tag w pliku HTML, który załaduje plik moment.js.Aby uszczęśliwić TypeScript, możesz dodać
u góry plików, gdzie używasz go, aby zatrzymać błędy kompilacji, lub możesz użyć
lub użyj tsd, aby zainstalować plik moment.d.ts, który może samodzielnie znaleźć TypeScript.
Przykład
Pamiętaj tylko, aby dodać tag skryptu do kodu HTML, w przeciwnym razie moment nie będzie istniał.
Ładowanie modułu
moment
Najpierw musisz skonfigurować moduł ładujący, taki jak System.js, aby załadować chwilowe pliki commonjs
Następnie zaimportuj moment do pliku, w razie potrzeby użyj
lub
EDYTOWAĆ:
Istnieją również opcje z niektórymi programami pakującymi, takimi jak Webpack lub Konstruktor SystemJS lub Browserify, które utrzymają chwilę na obiekcie okna. Aby uzyskać więcej informacji na ten temat, odwiedź odpowiednie strony internetowe w celu uzyskania instrukcji.
źródło
System
ładowanie w wersji chwilowej węzła commonjs, a następnie będziesz w stanie odwoływać się do niegoimport * as moment from 'moment';
lub zimport moment = require('moment');
którym we wszystkich celach i celach są identyczne, ale mają pewne subtelne różnice w maszynopisie.typings install moment --ambient -- save
nie pobieratypings
pliku definicji i nie tworzy odniesienia do///<reference path="./path/to/moment.d.ts" />
? Mam ten sam błąd podczas uruchamianianpm run tsc
import
.Poniższe działało dla mnie.
Najpierw zainstaluj na chwilę definicje typów.
typings install moment --save
(Uwaga: NIE
--ambient
)Następnie, aby obejść brak odpowiedniego eksportu:
źródło
import moment from "moment";
zamiast tego zrobić, żeby działało.import * as moment from 'moment';
jest kluczem.Wybrałbym następujące:
npm install moment --save
Do tablicy
systemjs.config.js
plikumap
dodaj:'moment': 'node_modules/moment'
do
packages
tablicy dodaj:'moment': { defaultExtension: 'js' }
W pliku component.ts użyj:
import * as moment from 'moment/moment';
i to wszystko. Możesz użyć z klasy swojego komponentu:
today: string = moment().format('D MMM YYYY');
źródło
Używamy teraz modułów,
próbować
import {MomentModule} from 'angular2-moment/moment.module';
po
npm install angular2-moment
http://ngmodules.org/modules/angular2-moment
źródło
npm install moment --save
,npm install @types/moment --save
stackoverflow.com/questions/35166168/…import * as moment from 'moment';
Aby użyć go w
Typescript
projekcie, musisz zainstalować moment:npm install moment --save
Po chwili instalacji możesz użyć go w dowolnym
.ts
pliku po zaimportowaniu:import * as moment from "moment";
źródło
--- Aktualizacja 11.01.2017
Pisanie jest teraz przestarzałe i zostało zastąpione przez npm @types . Od teraz uzyskanie deklaracji typu nie będzie wymagało żadnych narzędzi oprócz npm. Aby użyć Moment, nie trzeba instalować definicji typów @types ponieważ Moment już udostępnia własne definicje typów.
Sprowadza się to więc do zaledwie 3 kroków:
1 - moment instalacji, który zawiera definicje typów:
2 - Dodaj znacznik skryptu do pliku HTML:
3 - Teraz możesz go po prostu użyć. Kropka.
--- Oryginalna odpowiedź
Można to zrobić w zaledwie 3 krokach:
1 - Zainstaluj definicję momentu - plik * .d.ts :
2 - Dodaj znacznik skryptu do pliku HTML:
3 - Teraz możesz go po prostu użyć. Kropka.
źródło
declare var moment;
Jednak pisanie nie działa dla mnie. Po wpisaniumoment().
bez inteligencji. Chyba brakuje mi tutaj kilku kroków.Dla Angular 7+ (obsługuje również 8 i 9) :
1: Zainstaluj moment za pomocą polecenia
npm install moment --save
2: Nie dodawaj nic do
app.module.ts
3: Po prostu dodaj instrukcję importu na górze
component
lub dowolnego innego pliku, takiego jak ten:import * as moment from 'moment';
4: Teraz możesz używać
moment
dowolnego miejsca w kodzie. Tak jak:myDate = moment(someDate).format('MM/DD/YYYY HH:mm');
źródło
import * as moment_ from 'moment'; const moment = moment_;
przeciwnym razie dostawałemError: Cannot call a namespace ('moment')
moment_
to tylko dosłowne imię. Myślę, że może to być cokolwiek ...import * as moment from 'moment';
zwiększysz rozmiar pakietu o ~ 500 KB. Jest dobry artykuł wyjaśniający problem z rozwiązaniem medium.jonasbandi.net/…z ng CLI
w app.module
w składniku
w ten sposób zaimportujesz chwilę
AKTUALIZACJA Kątowe => 5
Dla mnie działa w prod, ale także w wersji uniwersalnej
Nie lubię korzystać z żadnego momentu, ale wykorzystuję moment
źródło
Parameter 'moment' implicitly has an 'any' type
błąd.Biblioteka angular2-moment ma potoki takie jak {{myDate | amTimeAgo}} do użycia w plikach .html.
Do tych samych potoków można również uzyskać dostęp jako funkcje maszynopisu w pliku klasy komponentów (.ts). Najpierw zainstaluj bibliotekę zgodnie z instrukcją:
W node_modules / angular2-moment będą teraz pliki „.pipe.d.ts”, takie jak calendar.pipe.d.ts , date-format.pipe.d.ts i wiele innych.
Każda z nich zawiera nazwę funkcji Typescript dla równoważnego potoku, na przykład DateFormatPipe () jest funkcją dla amDateFormatPipe .
Aby użyć DateFormatPipe w swoim projekcie, zaimportuj go i dodaj do globalnych dostawców w app.module.ts:
Następnie w dowolnym komponencie, w którym chcesz użyć funkcji, zaimportuj ją na górze, wstrzyknij do konstruktora i użyj:
Aby użyć dowolnej funkcji, wykonaj ten proces. Byłoby miło, gdyby istniał jeden sposób uzyskania dostępu do wszystkich funkcji, ale żadne z powyższych rozwiązań nie działało dla mnie.
źródło
Jeśli możesz dodawać więcej pakietów innych firm, skorzystałem z biblioteki angular2-moment . Instalacja była dość prosta i należy postępować zgodnie z najnowszymi instrukcjami na README. W związku z tym zainstalowałem także pisanie .
Dla mnie działało to jak urok i prawie nie dodałem żadnego kodu, aby go uruchomić.
źródło
Nie jestem jednak pewien, czy nadal jest to problem dla ludzi ... Używanie SystemJS i MomentJS jako biblioteki, rozwiązało to dla mnie
Stąd działa dla mnie dobrze.
źródło
dla angular2 RC5 to zadziałało dla mnie ...
pierwszy moment instalacji za pośrednictwem npm
Następnie zaimportuj moment do komponentu, którego chcesz użyć
na koniec skonfiguruj moment w „map” i „paczkach” systemjs.config.js
źródło
import 'moment/locale/de.js';
dzięki!Oprócz odpowiedzi SnareChop musiałem zmienić plik piszący dla momentjs.
W
moment-node.d.ts
zastąpiłem:z
źródło
Moment.js obsługuje teraz TypeScript w wersji 2.2.14.
Zobacz: https://github.com/moment/moment/pull/3280
źródło
Moja własna wersja używania Moment in Angular
npm i moment --save
Najpierw importuj moment jako
_moment
, a następnie zadeklarujmoment
zmienną o typie_moment.Moment
o wartości początkowej_moment()
.Zwykły import momentu nie zapewni żadnego automatycznego uzupełniania, ale jeśli zadeklarujesz moment z
Moment
interfejsem typu z_moment
przestrzeni nazw z'moment'
pakietu zainicjowanego z wywołaną przestrzenią nazw momentów_moment()
, automatycznie dokończysz api chwili.Myślę, że jest to najbardziej kątowy sposób używania momentu bez użycia
@types
typings
lub angularnych dostawców, jeśli szukasz automatycznego uzupełniania bibliotek javascript waniliowych, takich jak moment.źródło
npm install @types/moment --save
Spróbuj dodać
"allowSyntheticDefaultImports": true
do swojegotsconfig.json
.Co robi flaga?
Zasadniczo informuje to kompilator TypeScript, że można użyć instrukcji importu ES6, tj
w module CommonJS, takim jak Moment.js, który nie deklaruje domyślnego eksportu. Flaga wpływa tylko na sprawdzanie typu, a nie na generowany kod.
Jest to konieczne, jeśli używasz SystemJS jako modułu ładującego moduł. Flaga zostanie automatycznie włączona, jeśli powiesz swojemu kompilatorowi TS, że używasz SystemJS:
Spowoduje to również usunięcie wszelkich błędów zgłaszanych przez IDE, jeśli są one skonfigurowane do korzystania z
tsconfig.json
.źródło
dla angular2 z systemjs i jspm musiał zrobić:
źródło
Dla użytkowników ANGULAR CLI
Korzystanie z bibliotek zewnętrznych znajduje się w dokumentacji tutaj:
https://github.com/angular/angular-cli/wiki/stories-third-party-lib
źródło
Postępowałem zgodnie z poradami, aby zezwolić na importSyntheticDefaultImports (ponieważ od teraz nie ma dla mnie eksportu), używając Systemu. Następnie zastosowałem się do czyjejś porady:
Z chwilą mapowane w mojej konfiguracji system.js. Z innych powodów inne wyciągi z importu nie działałyby dla mnie
źródło
Dla mnie działało:
Węzeł momentu nie istnieje w repozytorium typów. Musisz przekierować do Zdecydowanie wpisanego, aby działał za pomocą przedrostka dt.
źródło
Z systemjs to, co zrobiłem, to wewnątrz mojej systemjs.config dodałem mapę
moment
A potem możesz łatwo importować
moment
, wykonując czynnościźródło
Wiem, że to stary wątek, ale dla mnie najprostszym rozwiązaniem, które faktycznie działało, było:
npm install moment --save
źródło