[解決済み] typescriptでmoment.jsをインポートするには?
質問
Typescriptを学ぼうとしています。関係ないとは思いますが、このデモではVSCodeを使っています。
私は
package.json
の中に、このような断片があります。
{
"devDependencies": {
"gulp": "^3.9.1",
"jspm": "^0.16.33",
"typescript": "^1.8.10"
},
"jspm": {
"moment": "npm:moment@^2.12.0"
}
}
次に、Typescriptのクラス
main.js
をこのようにします。
import moment from 'moment';
export class Main {
}
私の
gulpfile.js
はこのようになります。
var gulp = require('gulp');
var typescript = require('gulp-tsb');
var compilerOptions = {
"rootDir": "src/",
"sourceMap": true,
"target": "es5",
"module": "amd",
"declaration": false,
"noImplicitAny": false,
"noResolve": true,
"removeComments": true,
"noLib": false,
"emitDecoratorMetadata": true,
"experimentalDecorators": true
};
var typescriptCompiler = typescript.create(compilerOptions);
gulp.task('build', function() {
return gulp.src('/src')
.pipe(typescriptCompiler())
.pipe(gulp.dest('/dest'));
});
gulp buildを実行すると、メッセージが表示されます。
"../main.ts(1,25): Cannot file module 'moment'."
もし私が
import moment = require('moment');
を使用すると、jspm は動作し、アプリケーションを実行するときにモジュールを取り込みますが、私はまだビルドエラーを受け取っています。
また、私は試してみました。
npm install typings -g
typings install moment --ambient --save
しかし、問題が改善されるどころか、悪化してしまいました。現在では、ビルド時に上記のエラーに加えて、以下のようなエラーも発生します。
"../typings/browser/ambient/moment/index.d.ts(9,21): Cannot find namespace 'moment'."
typingsから提供されたファイルに移動して、ファイルの一番下に追加すると。
declare module "moment" { export = moment; }
2つ目のエラーは解消されましたが、momentを動作させるためには、まだrequire文が必要で、私の
main.ts
ファイル内で動作させるために require 文が必要で、まだ最初のビルドエラーが発生しています。
を自分で作成する必要がありますか?
.d.ts
ファイルを作成する必要があるのでしょうか、それとも私が見逃している設定部分があるのでしょうか?
どのように解決するのですか?
更新
どうやら、momentは独自の型定義を提供するようになったようです(曰く
sivabudh
によると、少なくとも 2.14.1 以降では)、このため
typings
または
@types
を全く含まない。
import * as moment from 'moment'
は、npmパッケージで提供される型定義を読み込む必要があります。
しかし、そうは言っても moment/pull/3319#issuecomment-263752265 moment チームはこれらの定義を維持する上でいくつかの問題を抱えているようです (彼らはまだそれらを維持する誰かを探しています)。 .
インストールする必要があるのは
moment
型付けは
--ambient
のフラグがありません。
そして、それを
import * as moment from 'moment'
関連
-
[解決済み] TypeScriptで文字列を数値に変換する方法とは?
-
[解決済み] TypeScript で `window` に新しいプロパティを明示的に設定するにはどうすればよいですか?
-
[解決済み] TypeScriptでの取得と設定
-
[解決済み] Moment.jsで日付オブジェクトに変換する
-
[解決済み】TypeScriptのインターフェースと型について
-
[解決済み] [Solved] Moment.jsで日付から時間を削除するにはどうすればよいですか?
-
[解決済み] TypeScriptでObject.keysがkeyof型を返さないのはなぜですか?
-
[解決済み] タイプスクリプトのパイプ(|)の意味とは?
-
[解決済み] グローバルスコープの拡張は、外部モジュールまたはアンビエントモジュール宣言にのみ直接ネストすることができます(2669)
-
[解決済み] ngForとAsync Pipe Angular 2でObservableオブジェクトから配列を利用する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] TypeScriptで Object.keys return string[].
-
[解決済み] TypeScriptの予約語 "type "とは何ですか?
-
[解決済み] ts ES5/ES3の非同期関数やメソッドには、「Promise」コンストラクタが必要です。
-
[解決済み] Typescriptでインターフェースやクラスを使用する場合 [重複].
-
[解決済み] ユニオン型からインターセクション型への変換
-
[解決済み] Angular 2でアプリ起動時にサービスを実行する方法
-
[解決済み] Typescript のプリミティブ型:"number" と "Number" の違い(TSC は大文字と小文字を区別しない)?
-
[解決済み] TypeScriptでObject.keysがkeyof型を返さないのはなぜですか?
-
[解決済み] タイプスクリプト。カスタムタイプに対する typeof のチェック
-
[解決済み] ngForとAsync Pipe Angular 2でObservableオブジェクトから配列を利用する。