2016-10-21 25 views
7

申し訳ありませんが、私の最初の質問は、とてもエキサイティングです! :)Typescript 2.0のMomentJS型定義

私はTypescript 2.0で動作するMomentJS定義を取得しようとしています。

npm install @types/angular --save-devを実行するだけで、Angular定義を機能させることに問題はありません。

ただし、MomentJS(2.15.1)にはインストール時にパッケージの一部としてmoment.d.tsが既に付属しています。

あなたが角度に同様のアプローチをしようとした場合、すなわちnpm install @types/moment --save-dev、これはあなたが得るものです:

NPMは2.13.0 @タイプ/瞬間@非推奨WARN:これはモーメントのスタブタイプの定義であります(https://github.com/moment/moment)。モーメントはそれ自身のタイプ定義を提供するので、あなたは@タイプ/瞬間をインストールする必要はありません!

確かに、node_modules\@types\momentに行くと、そこには何も役立ちません。

はい、私のルートフォルダにファイルを追加していますので、Typescript 2.0は自動的にnode_modulesの@typesを取得します(これはAngularがうまくいく理由です)。しかし、MomentJSでは以下のエラーが発生します。

TS2304は名「瞬間」が見つかりません:d.tsはTS2)は、それがあることを期待場所にはありません。

また"typeRoots"の設定をtsconfig.jsonに設定して遊んでみました。私はVS2015を使用しています

{ 
    "devDependencies": { 
    "@types/angular": "^1.5.16" 
    }, 
    "dependencies": { 
     "moment": "^2.15.1" 
    } 
} 

、この問題の場合:

これは私のpackage.jsonの関連作品です。

だから... "予期しない"フォルダにあるMomentの型定義を読み込むためにTypescript 2.0を取得する方法に関するアイデアはありますか?

+2

するTSを変更する必要はありませんでした私のため

///<reference path="node_modules/moment/moment.d.ts"/> import moment = Moment; declare const moment: Moment; 

を働いていた、あなたは解決策を見つけましたか? – Joshua

+2

私もこの問題を抱えています – mosesfetters

+2

同じ問題がありましたが、現時点では修正が見つかりません – Jochen

答えて

3

私は

declare module 'moment' { 
    export default moment; 
} 

で輸出文を置き換えることにより、あなたべき

変更moment.d.tsがあなたにダミーファイルfixmoment.tsを追加することを、他のどこかを見出した(しかし、ここで覚えていません)次の行のプロジェクト

import * as moment from 'moment'; 

すべてのファイルをコンパイルするようになりました。残念ながらVS2015はまだエラーを返します tsc:error TS2688:ビルド: '瞬間'のタイプ定義ファイルが見つかりません。 私は分かりません。

+0

ここに参考文献があります:https://github.com/DefinitelyTyped/DefinitelyTyped/issues/11864スレッドの動作_seems_は、ハックを追加しないことで解決できました。スレッドの中で言及されたステップのどれも私のために働かない。回避策はまだ@reknaの状態で行うべきです。 – user1821052

+0

import *は瞬間として...私のためには機能しませんでしたが、このような参照はうまくいきました:/// hlo

1

同じ問題がありました。私はこれを読んでcommentdeclare var moment;custom-typings.d.tsを追加します。それは正常に働いたが、なぜ私は理解していない。

VS2015 SP3 + TypeScript2.0.6。0、angular2-webpack-starterベースのプロジェクト。

4

moment.d.tsファイルはnode_modules\momentの下にあります。このファイルは瞬間自体にパッケージされているためです。

VS 2017とTypeScript 2.2では、typeRootsを指定する必要はありません。各@typesサブディレクトリがtypeRootsのエントリを必要に応じて、私は忘れ^

typeRoots: [ 'node_modules/@types/', 'node_modules/moment/' ]

:しかし、ご使用の環境のようなそれらの2つ以上を指定する必要があります。

これは私がtsconfig.jsonに特別な変更を加えることなくVS 2017活字体2.2に使用するプロセスです(ただし、このようなものは、より新しいバージョンで変更):

それは自動的にES6スタイルのインポートを経て発見されました。

import * as moment from "moment";

これは、名前空間momentが単一のエイリアスにマージmomentという名前の関数と同様にインポートされます。

あなたも同様に、次の実行、Moment(戻り値の型)にインポートしたい場合:現在のmoment.d.ts2.18.1)で

import { Moment } from "moment";

を、このタイプは、それ以外の場合はアクセスできません。

は、過去に私がvar moment = require("moment");を使用していますが、ブラウザがサポートしている何かに必要とスタイルCommonJS/AMDを変換するbrowserifyまたはrequirejsを実行している場合を除き、それはあなたのセットアップではできないことがあります。 customer-typings.d.tsファイルに次のように行う

0

は、私も、私は同じ問題を抱えているtsconfig.jsonファイル

関連する問題