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):
tsd-npm i -g tsdtypings-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:
- Přidání této možnosti
"allowSyntheticDefaultImports": true,do sekcecompilerOptionsv souborutsconfig.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.) - Také přidejte
"moduleResolution": "node"do stejné sekcecompilerOptions. (Tuto možnost jsem našel při procházení webu) - Importování modulu moment tímto způsobem
import * as moment from 'moment';
