2016-12-14 8 views
3

私は内部グローバル定義と外部ライブラリthing.d.tsファイルがあります:私は私の活字体でNPMモジュールを参照TypeScriptが.defaultをグローバルに定義されたインポートに追加するのはなぜですか?

declare var thing: ThingStatic; 
export default thing; 

を:

import thing from 'thing'; 
... 
thing.functionOnThing(); 

私は(ES6をターゲット)TSをtranspileするとき、それはのようになりますこの:

const thing_1 = require("thing"); 
... 
thing_1.default.functionOnThing(); 

これは、エラーがスローされます。

Cannot read property 'functionOnThing' of undefined

thing_1functionOnThing()の間に追加するのはなぜですか?

ThingStaticdefaultという名前のプロパティがなく、.d.tsファイルが定義する基になるJSオブジェクトにはdefaultプロパティがありません。

なぜTypeScriptがプロパティを追加し、それを停止するのですか?

答えて

0

これはグローバルTS定義とtsconfig.json"module": "commonjs"のバグであるように思われました。

グローバルTS定義を使用して、すべての出力を1つのファイルにスティッチすることも、モジュールを使用して直接インポートすることもできます。

ここでエラーが原因requireモジュールのコンテキストを返し、そしてdefaultの名前が無関係であることにある - それは常にdefaultなり...

declare var thing: ThingStatic; 
export thing; // Explicit export for thing 
export default thing; // Default export for thing 

requireはそうcommonjsで、このコンテキストを返します。モジュール:

import module from 'thing'; 
var thing = module.default; // From the default export 
var alsoThing = module.thing; // From the named export 

しかし、私は、これは矛盾であることがわかってきたので、モジュールをES6に切り替え:

import thing from './thing'; // Import default 
import { thing } from './thing'; // Import named 
const thing = (await import('path/to/thing.js')).default; // Import dynamic 
8
import thing from 'thing'; 

コードのこのラインはは、「モジュール'thing'からdefault輸出をインポートし、ローカル名thingにバインド」を意味します。

TypeScriptは、モジュールオブジェクトのdefaultプロパティを要求しアクセスします。あなたはおそらく書くことが何を意味するのか

import * as thing from 'thing'; 
+0

今、私は 'thing.default'を自分のTypeScriptに持っていますので、少なくとも私はそれを回避することができます。これは私が使っている図書館のバグですか?グローバル変数をインポートできるように '.dts 'をどのように書くべきですか? – Keith

+0

.d.tsファイルは 'export default thing'の代わりに' export = thing'と言うべきです –

+0

私はちょうどそれを試みました、それは私にエラーを与えます: 'TS2309輸出割り当ては他の輸出された要素。' – Keith

関連する問題