2017-06-10 5 views
1

私はウィンドウ内にグローバルオブジェクトを作成する外部のJavaScriptライブラリを持っています。 このオブジェクトをtypescriptコードで使用するには、他のtypescriptファイル内にインポートされる環境モジュールファイル(d.ts)を作成しました。自己作成した環境モジュールをtypescriptで作成してインポートするにはどうすればよいですか?

私が直面しています問題は、コンパイラは、モジュールファイルはモジュール

src/App.ts(6,22): error TS2306: File '/Users/user/ts-problems/src/abc.d.ts' is not a module. 

ではないと言う私もTS-ローダーでのWebPACKを使用しますが(TSC)単独でそれをコンパイルしてるということですが、私与えます同じ結果。

これは

declare module "abc" { 
    export interface Greeter { 
     sayHello(): void; 
    } 
    export var abc: Greeter; 
} 

abc.d.ts周囲モジュールファイルであり、これはApp.tsファイルです:テストプロジェクトはどれhttps://github.com/daneilsan/ts-module-problem

でご利用いただけます

import * as abc from "./abc"; 


class App { 
    static sayGoodbye() { 
     console.log("goodbye from App.ts"); 
    } 
} 

abc.abc.sayHello(); 
App.sayGoodbye(); 

他に何をするべきかわからないので、助けになることは大変ありがたいです。

+0

ファイルが正しくマップされていれば、/ abc''で十分です。 – toskv

+0

@toskvそれは私に同じ結果を与えますモジュールが見つかりません:エラー:解決できません '。/ abc 'in'/Users/user/ts-problems/src ' –

+0

npmから 'abc'というパッケージをインポートしようとしていますか、TypeScriptが存在しないことを知っているローカルファイルをインポートしようとしていますか?/abc'? –

答えて

0

ファイルabc.d.tsは、最上位にexportまたはimprortステートメントを持たないため、モジュールではなく、相対インポートでは使用できません。つまり、

import ...some stuff... from "./abc"; 

が失敗します。

ただし、デフォルトではので、*.tsまたは*.d.ts拡張子を持つファイルは、コンパイルに含まれている、あなたのtsconfig.jsonにはfilesincludeまたはexclude存在しません。 abc.d.tsを意味

///referenceに必要ことがありませんので、含まれており、その内のすべての宣言は、コンパイラによって見られ、特にこの1:あなたはこのインポートを使用できることを意味します

declare module "abc" { 
    ... stuff exported here 
} 

import * as abc from "abc"; 

インポートするものを取得する。それはabc.Greeterabc.abcとして利用可能になります。

このフォーム

import {Greeter, abc} from "abc"; 

は、直接ではなくabc範囲の特性としてGreeterabcを利用可能にする、動作します。要するに

:物事が働いて得るために、import文でモジュール名はdeclare module声明(​​)と同様に、正確に綴られなければならない、とdeclare moduleを含むファイルは、コンパイル中に含まれていなければならない(それはすでにですtscontigでデフォルトで行われます)。

+0

あなたは正しいです。ファイルabc.d.tsには「エクスポート」がありません。私はそれを理解し、BaseUrl tsconfig指令で非相対モジュールを使用するようにプロジェクトを変更しました。答えは非常に洞察力があります。ありがとう! –

関連する問題