Vyhledávání na webu

modul - Moment.js + TypeScript. Nelze najít název moment


Vyvíjím webovou aplikaci s Knockoutem ve Visual Studiu. Právě jsem nainstaloval Knockout přes Bower, zahrnul d.ts soubor do projektu, zahrnul skript na HTML stránku a teď mám přístup k ko.

Teď se pokouším použít moment.js. Jako u knockout: nainstaluji, zahrnu d.ts, zahrnu skript na stránku a dostanu chybu cannot find name 'moment'. Přidání reference na d.ts nepomáhá, import * as moment from 'moment' dává chybu can not find module moment.

Vím, že je to hloupý problém, ale nemohu ho opravit. Co dělám špatně?

Odpověď č. 1

Co bych doporučil, je použít nějaký nástroj pro správu vašich definic. Některé oblíbené možnosti (není nutné mít oba, stačí si vybrat jeden):

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

Tyto fungují podobně jako správci balíčků. Můžete instalovat své definice stejně, jako npm/bower instaluje vaše závislosti.

Jakmile máte jeden z těchto nainstalovaný, přejděte do svého projektu a nainstalujte moment + jeho definici

npm install moment --save

A jeden z těchto:

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

Oba tyto způsoby vytvoří složku s vašimi definicemi (oba ji nazývají typings) a oba obsahují soubor s „deštníkovou“ definicí, na který byste se měli odkázat v vstupním bodě vaší aplikace (první je pro tsd, druhý pro typings):

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

Poté, co je toto hotovo, můžete použít moment (nebo jakýkoli jiný modul) tak, jak byste normálně:

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

Doporučuji podívat se na tyto:

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

Odpověď č. 2

V mém případě se mi nakonec podařilo tento problém vyřešit následujícím způsobem:

  1. Přidání této možnosti "allowSyntheticDefaultImports": true, do sekce compilerOptions v souboru tsconfig.json (EDITOVÁNO: Jak dokumentace momentu uvádí v Poznámce: Pokud máte problémy s importem momentu, zkuste přidat "allowSyntheticDefaultImports": true do compilerOptions ve vašem souboru tsconfig.json.)
  2. Také přidejte "moduleResolution": "node" do stejné sekce compilerOptions. (Tuto možnost jsem našel při procházení webu)
  3. Importování modulu moment tímto způsobem import * as moment from 'moment';

Související články