web-dev-qa-db-ja.com

Moment.js + TypeScript。名前の瞬間が見つかりません

VisualStudioでノックアウト付きのWebアプリケーションを開発しています。 bower経由でノックアウトをインストールし、プロジェクトにd.tsファイルを含め、HTMLページにスクリプトを含めただけで、koにアクセスできるようになりました。

今、moment.jsを使用してみます。ノックアウトの場合と同様に、インストール、d.tsのインクルード、ページへのスクリプトのインクルードを実行すると、エラーが発生しますcannot find name 'moment'。 d.tsへの参照を追加しても役に立たない、import * as moment from 'moment'エラーが発生しますcan not find module moment

私はそれが愚かな問題であることを知っていますが、それを修正することはできません。何が悪いのですか?

12
user3272018

私がお勧めするのは、定義を管理するためのツールを使用することです。いくつかの人気のあるオプション(両方は必要ありません。1つだけ選択してください):

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

これらは、パッケージマネージャーと同様に機能します。 npm/bowerが依存関係をインストールするように、定義をインストールできます。

これらのいずれかをインストールしたら、プロジェクトに移動して、モーメントとその定義をインストールします

npm install moment --save

そして、これらの1つ:

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

これらは両方とも、その中に定義を含むフォルダーを作成し(どちらもタイプと呼びます)、どちらにも「傘」定義ファイルがあり、アプリケーションのエントリーポイントで参照する必要があります(1つ目はtsd用、2つ目はtsd用)タイピング):

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

これが完了したら、次のようにモーメント(または他のモジュール)を使用できます。

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

これらをチェックすることをお勧めします:

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

11
Balázs Édes

私の場合、次のようにして最終的にこのエラーを解決します:

  1. このオプション"allowSyntheticDefaultImports": true,tsconfig.jsonファイルのcompilerOptionsセクションに追加します([〜#〜] edited [〜#〜]moment doc 。のようにでサイス注:If you have trouble importing moment, try add "allowSyntheticDefaultImports": true in compilerOptions in your tsconfig.json file.
  2. また、同じcompilerOptionsセクションに"moduleResolution": "node"を追加します。 (このオプションはウェブを見回して見つかりました)
  3. このようなモーメントモジュールのインポートimport * as moment from 'moment';
9
Raúl Otaño

これは私にとって問題を解決するようです(このスレッドの他の解決策は機能しませんでした):

import * as moment from 'moment/moment.js';

Jsファイルを直接参照していても、正しいTypeScript定義を取得しているようです。その理由は、node_modulesの下の「moment」フォルダーにindex.jsファイルがないためだと思いますが、TypeScriptの型付け/コンパイラの専門家ではありません。

4
Samih

以下のコードを追加してみてください、それは私のために働きました

import * as MomentD from "node_modules/moment/moment.d";
1
Sunitha Nagappa