2015-12-29 20 views
5

私のノードプロジェクトでTypescriptを使用しようとしていますが、それに問題があります。NodeJS + TypeScript:タイプがスクリプトでコンパイルされたコードが不明瞭な構文

これは私のindex.tsファイルです:私は実行している

import express from 'express'; 

const app = express(); 

tsc --module commonsjs -d index.ts 

を私の出力はindex.jsです:

この ["default"]が来なかった
var express_1 = require('express'); 
var app = express_1["default"](); 

から?

var app = express_1["default"](); 
          ^

TypeError: express_1.default is not a function 

は、私の知る限り理解して、私は「デフォルト」の括弧なしのコードを取得する必要がありますし、それがうまく働いているだろう - 私は括弧を削除しようと、それが働いた:正しく実行しないように私のコードを作っています。

私はここで何が欠けていますか?

答えて

5

最も安全な解決策は、次のようになります。インポート用の公式ドキュメントは、宣言がhereを見つけることができる必要が

var express = require('express'); 

import express = require('express'); 

これはにtranspiles。

最終的な段落hereから判断すると、typescriptは "default"という名前のエクスポートが上記のコードとして機能すると考えています。


サイドノートでは、不足しているデフォルトを使用しようと、コンパイルの試行で警告をスローします(書き込み時の[email protected])typescriptですの最新バージョンを次のようになります。

index.ts(1,8): error TS1192: Module '"express"' has no default export. 

サイドノート2は、import * as express from 'express';構文を使用して、Microsoftからの例では、hereを見つけることができます。 commonjsというモジュール(この例ではthey are)をターゲティングする場合、これもvar express = require('express');になります。

+1

レガシーモジュールをインポートするには、 'import *'が間違った方法です。 http://stackoverflow.com/a/29598404/252087を参照してください。 –

2

Expressのような非ES6モジュールのデフォルトのエクスポートを使用する場合は、従来のインポート構文import express = require('express')を使用する必要があります。 ES6モジュールでは、Node.jsモジュールのmodule.exportsやAMDモジュールのreturnのようなデフォルト値のエクスポートはありません。 ES6モジュールのデフォルトの書き出しはdefaultのキーに過ぎません。このため、ES35のデフォルトのimportを使用しようとすると、TypeScriptはdefaultプロパティへのアクセス権を持つJavaScriptを生成します。

この詳細については、New es6 syntax for importing commonjs/amd modules i.e. `import foo = require('foo')`を参照してください。

+0

ありがとう!私はあなたのおかげで、その件に関するいくつかの研究をしました。 – Shikloshi

+0

私はあなたが正解として他の答えを受け入れた理由を理解していません。それは間違った答えです。 –

+0

Typescriptの現在のバージョンが本当に間違っている場合は、Microsoftにその例を編集させることをお勧めします。 – dvlsg

関連する問題