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
。
私はそれが愚かな問題であることを知っていますが、それを修正することはできません。何が悪いのですか?
私がお勧めするのは、定義を管理するためのツールを使用することです。いくつかの人気のあるオプション(両方は必要ありません。1つだけ選択してください):
tsd
-npm i -g tsd
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
私の場合、次のようにして最終的にこのエラーを解決します:
"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.
)compilerOptions
セクションに"moduleResolution": "node"
を追加します。 (このオプションはウェブを見回して見つかりました)import * as moment from 'moment';
これは私にとって問題を解決するようです(このスレッドの他の解決策は機能しませんでした):
import * as moment from 'moment/moment.js';
Jsファイルを直接参照していても、正しいTypeScript定義を取得しているようです。その理由は、node_modulesの下の「moment」フォルダーにindex.jsファイルがないためだと思いますが、TypeScriptの型付け/コンパイラの専門家ではありません。
以下のコードを追加してみてください、それは私のために働きました
import * as MomentD from "node_modules/moment/moment.d";