Eu tentei usá-lo com ligações datilografadas:
npm install moment --save
typings install moment --ambient -- save
test.ts:
import {moment} from 'moment/moment';
E sem:
npm install moment --save
test.ts:
var moment = require('moment/moment');
Mas quando eu chamo moment.format (), recebo um erro. Deve ser simples, alguém pode fornecer uma combinação de linha de comando / importação que funcione?
typescript
angular
Sergey Aldoukhov
fonte
fonte
Respostas:
Atualização em abril de 2017:
A partir da versão 2.13.0, o Moment inclui um arquivo de definição de texto datilografado. https://momentjs.com/docs/#/use-it/typescript/
Basta instalá-lo com npm, no seu tipo de console
E então, no seu aplicativo Angular, a importação é tão fácil quanto isto:
É isso aí, você obtém suporte completo ao TypeScript!
Edição de bônus: Para digitar uma variável ou propriedade como
Moment
em Texto Dactilografado, você pode fazer isso, por exemplo:fonte
moment
é um recurso global de terceiros. O momento em que o objeto permanece nowindow
navegador. Portanto, ele não está corretoimport
em seu aplicativo angular2. Em vez disso, inclua a<script>
tag no seu html que carregará o arquivo moment.js.Para deixar o TypeScript feliz, você pode adicionar
na parte superior dos arquivos, onde você o utiliza para interromper os erros de compilação ou pode usar
ou use tsd para instalar o arquivo moment.d.ts que o TypeScript pode encontrar por si próprio.
Exemplo
Apenas certifique-se de adicionar a tag de script no seu html ou o momento não existirá.
Carregamento do módulo
moment
Primeiro, você precisa configurar um carregador de módulo como o System.js para carregar o momento em que os arquivos commonjs
Depois, importe o momento para o arquivo onde for necessário
ou
EDITAR:
Também existem opções com alguns pacotes configuráveis, como o construtor Webpack ou SystemJS ou o Browserify, que manterão o momento fora do objeto da janela. Para mais informações, visite os respectivos sites para obter instruções.
fonte
System
load na versão do momento do nó commonjs, e poderá referenciá-loimport * as moment from 'moment';
ou com oimport moment = require('moment');
qual, para todos os efeitos, é idêntico, mas possui algumas diferenças sutis no texto datilografado.typings install moment --ambient -- save
não abretypings
o arquivo de definição e cria a referência///<reference path="./path/to/moment.d.ts" />
? Estou tendo o mesmo erro durante a execuçãonpm run tsc
import
momento.O seguinte funcionou para mim.
Primeiro, instale as definições de tipo por um momento.
typings install moment --save
(Nota: NÃO
--ambient
)Em seguida, para solucionar a falta de uma exportação adequada:
fonte
import moment from "moment";
vez disso, tive que fazê -lo funcionar.import * as moment from 'moment';
É a chave.Eu iria com o seguinte:
npm install moment --save
Na matriz
systemjs.config.js
do seu arquivo,map
adicione:'moment': 'node_modules/moment'
a
packages
variedade add:'moment': { defaultExtension: 'js' }
No seu component.ts, use:
import * as moment from 'moment/moment';
e é isso. Você pode usar da classe do seu componente:
today: string = moment().format('D MMM YYYY');
fonte
Estamos usando módulos agora,
experimentar
import {MomentModule} from 'angular2-moment/moment.module';
depois de
npm install angular2-moment
http://ngmodules.org/modules/angular2-moment
fonte
npm install moment --save
,npm install @types/moment --save
Stackoverflow.com/questions/35166168/...import * as moment from 'moment';
Para usá-lo em um
Typescript
projeto, você precisará instalar o momento:npm install moment --save
Após a instalação, você pode usá-lo em qualquer
.ts
arquivo após a importação:import * as moment from "moment";
fonte
--- Atualização 11/01/2017
A digitação agora está obsoleta e foi substituída por npm @types . A partir de agora, obter declarações de tipo não exigirá ferramentas além do npm. Para usar o Moment, você não precisará instalar as definições de tipo por meio de @types porque o Moment já fornece suas próprias definições de tipo.
Portanto, reduz para apenas 3 etapas:
1 - Instale o momento que inclui as definições de tipo:
2 - Adicione a tag de script no seu arquivo HTML:
3 - Agora você pode apenas usá-lo. Período.
--- Resposta original
Isso pode ser feito em apenas 3 etapas:
1 - Instale a definição de momento - arquivo * .d.ts :
2 - Adicione a tag de script no seu arquivo HTML:
3 - Agora você pode apenas usá-lo. Período.
fonte
declare var moment;
No entanto, as digitações não estão funcionando para mim. Depois de digitarmoment().
nenhum intellisense. Acho que estou faltando alguns passos aqui.Para Angular 7+ (Suporta 8 e 9 também) :
1: Instale momento por comando
npm install moment --save
2: Não adicione nada no
app.module.ts
3: Basta adicionar a declaração de importação na parte superior da sua
component
ou de qualquer outro arquivo como este:import * as moment from 'moment';
4: Agora você pode usar
moment
qualquer lugar do seu código. Assim como:myDate = moment(someDate).format('MM/DD/YYYY HH:mm');
fonte
import * as moment_ from 'moment'; const moment = moment_;
Caso contrário, eu estava ficandoError: Cannot call a namespace ('moment')
moment_
é apenas um nome literal. Pode ser qualquer coisa, eu acho ...import * as moment from 'moment';
aumente o tamanho do pacote em ~ 500kb. Existe um bom artigo explicando o problema com uma solução medium.jonasbandi.net/…com ng CLI
no app.module
no componente
Desta forma, você importa o momento uma vez
ATUALIZAÇÃO Angular => 5
Para mim trabalha em prod com aot e também com universal
Eu não gosto de usar nada além de moment.Moment
fonte
Parameter 'moment' implicitly has an 'any' type
erro.A biblioteca angular2-moment possui canais como {{myDate | amTimeAgo}} para usar em arquivos .html.
Esses mesmos pipes também podem ser acessados como funções Typescript em um arquivo de classe de componente (.ts). Primeiro instale a biblioteca conforme as instruções:
No node_modules / angular2-moment, agora haverá arquivos ".pipe.d.ts", como calendar.pipe.d.ts , date-format.pipe.d.ts e muito mais.
Cada um deles contém o nome da função TypeScript para o canal equivalente, por exemplo, DateFormatPipe () é a função de amDateFormatPipe .
Para usar o DateFormatPipe no seu projeto, importe e adicione-o aos seus fornecedores globais em app.module.ts:
Em qualquer componente em que você deseja usar a função, importe-a por cima, injete no construtor e use:
Para usar qualquer uma das funções, siga este processo. Seria bom se houvesse uma maneira de obter acesso a todas as funções, mas nenhuma das soluções acima funcionou para mim.
fonte
Se você concorda em adicionar mais pacotes de terceiros, usei a biblioteca angular2-moment . A instalação foi bem simples e você deve seguir as instruções mais recentes no arquivo LEIA-ME. Eu também instalei digitações como resultado disso.
Funcionou como um encanto para mim e quase não adicionei nenhum código para fazê-lo funcionar.
fonte
No entanto, não tenho certeza se isso ainda é um problema para as pessoas ... Usando o SystemJS e o MomentJS como biblioteca, isso resolveu para mim
Funciona bem a partir daí para mim.
fonte
para angular2 RC5 isso funcionou para mim ...
primeiro momento de instalação via npm
Em seguida, importe o momento no componente que você deseja usá-lo
Por fim, configure o momento em systemjs.config.js "map" e "packages"
fonte
import 'moment/locale/de.js';
Obrigado!Além da resposta do SnareChop, eu tive que alterar o arquivo de digitações para momentjs.
Em
moment-node.d.ts
eu substituí:com
fonte
O Moment.js agora suporta TypeScript na v2.14.1.
Consulte: https://github.com/moment/moment/pull/3280
fonte
Minha própria versão do Moment in Angular
npm i moment --save
Primeiro importe o momento como e
_moment
, em seguida, declare amoment
variável com o tipo_moment.Moment
com um valor inicial de_moment()
.A importação simples de momento não fornecerá nenhuma conclusão automática, mas se você declarar momento com a
Moment
interface de tipo do_moment
namespace do'moment'
pacote inicializado com o namespace do momento invocado_moment()
a conclusão automática das APIs do momento.Eu acho que essa é a maneira mais angular de usar o momento sem o uso
@types
typings
ou provedores angulares, se você estiver procurando a conclusão automática de bibliotecas de javascript vanilla como momento.fonte
npm install @types/moment --save
Tente adicionar
"allowSyntheticDefaultImports": true
ao seutsconfig.json
.O que a bandeira faz?
Isso basicamente diz ao compilador TypeScript que não há problema em usar uma instrução de importação ES6, ou seja,
em um módulo CommonJS como Moment.js, que não declara uma exportação padrão. O sinalizador afeta apenas a verificação de tipo, não o código gerado.
É necessário se você usar o SystemJS como seu carregador de módulos. O sinalizador será ativado automaticamente se você informar ao seu compilador TS que você usa o SystemJS:
Isso também removerá quaisquer erros gerados pelos IDEs se eles estiverem configurados para fazer uso do
tsconfig.json
.fonte
para angular2 com systemjs e jspm tinha que fazer:
fonte
Para usuários CLI ANGULAR
O uso de bibliotecas externas está na documentação aqui:
https://github.com/angular/angular-cli/wiki/stories-third-party-lib
fonte
Segui o conselho para permitir allowSyntheticDefaultImports (já que não há exportação do momento para usar para mim), usando o System. Então eu segui o conselho de alguém para usar:
Com o momento sendo mapeado na minha configuração system.js. As outras instruções de importação não funcionariam para mim, por algum motivo
fonte
O seguinte funcionou para mim:
O momento-nó não existe no repositório de digitações. Você precisa redirecionar para Definitely Type, para fazê-lo funcionar usando o prefixo dt.
fonte
Com systemjs, o que eu fiz é que, dentro do meu systemjs.config, adicionei o mapa para
moment
E então você pode importar facilmente
moment
apenas fazendofonte
Eu sei que é um tópico antigo, mas para mim a solução mais simples que realmente funcionou foi:
npm install moment --save
fonte