2016-08-25 3 views
3

TypeScriptの型定義を持たないnpmパッケージを使用しています。正確には、私はreact-google-mapsライブラリを使用しています。その例に従えIDEがIntelliSenseを提供するようなTypeScript定義なしでnpmパッケージをインポートするには?

、私はパッケージから次のコンポーネントをインポート:

error TS2305: Module '"react-google-maps"' has no exported member 'GoogleMapLoader'. 

だから、これまで私の迅速な修正プログラムは、次のとおりです。ただし

import {GoogleMapLoader, GoogleMap, Marker} from "react-google-maps"; 

、活字体は、コンパイル時にエラーがスローされますタイプ「any」のメンバを持つモジュールの宣言:

declare module "react-google-maps" { 
    export var GoogleMapLoader:any; 
} 

ここで、pr oblemは、私のIDE(WebStorm)がもうintellisenseを与えないということです。 GoogleMapLoaderは、反応成分として認識されていません。これは、私がBabelを使用していた場合に認識されていると考えられています(少なくともタイピングのないメソッドとプロパティ)。

タイプ定義なしでnpmパッケージをインポートして、TypeScriptコンパイラで解決することはできますが、IDEがintellisenseを提供するのを妨げることはできますか?

+1

'preferences' - >' languages&frameworks' - > 'JavaScript' - >' Libraries' - > 'Add'を試し、npmモジュールをライブラリとして追加してください。 –

+0

@SergeyPanfilov node_modulesに 'react-google-map'フォルダを追加しましたが、モジュールのインテリセンスはまだ得られていません。私が逃した可能性のあるものは何ですか? – Carven

+0

@ SergeyPanfilovあなたの提案はタイコスクリプトとは関係ありません。コンパイラは、WebStormが設定したライブラリを参照しません。 –

答えて

1

anyを使用する代わりに、使用しているものを宣言する必要があります。

例えば:

declare module "react-google-maps" { 
    interface GoogleMapLoaderProps { 
     .... 
    } 

    interface GoogleMapLoaderState { 
     .... 
    } 

    class GoogleMapLoader extends React.Component<GoogleMapLoaderProps, GoogleMapLoaderState> { } 
} 

あなたは、あなたが使用しているだけで何から始めて、サポート、およびゆっくりと物事を追加するIDEを必要とすることができます。
Writing Declaration Filesの確認方法については、Writing Declaration Filesをご覧ください。

+0

'react-google-map'は私によって書かれていません。これは私がインストールしたnpmパッケージです。だから、IDEでこのパッケージのインテリセンスを知りたいのであれば、その定義ファイル全体を書き出す必要がありますか?方法はありますか?すべてのプロパティとメソッド定義を記述することなく、IDEはES5/ES6を使用した場合のような型のないパッケージ内のクラス、メソッド、プロパティを認識できますか? – Carven

+0

いいえ、実際はありません。 IDEはサービスとしてコンパイラを使用するだけなので、実際の問題ではありません。何が起こっているのかを理解するためにはコンパイラが必要です。そして、IDEも同様に知っています。定義ファイルはライブラリのメーカによって提供されていないので、他の人(ユーザ)は '.d.ts'ファイルを作成し、異なるリポジトリを更新します(' DefinitelyTyped'など)。あなたのオプションは、IDEサポートなしで 'any'を使うか、あなた自身で書くことです。 lib全体に必要な部分だけを定義する必要はありません。 –

+0

umm ... Typescriptを使わないと、私は基本的なインテリセンスを得ることはできませんか?つまり、最初に定義ファイルがないBabelや普通のES5を使用していた場合、webstormはクラスのメンバ、関数/変数をパッケージに記述したものに基づいて基本的なインテリセンスを与えています。しかし、 "任意の" Typescript定義では、それらの関数/変数の認識を上書きしたように見えますが、IDEからのサポートはゼロになりますか?それは "定義を書く"のようなものか、 "全くインテリセンスがない"シナリオですか? – Carven

関連する問題