2015-11-19 9 views
9

現在、私はType6に移行しているReactプロジェクトをES6で作成しています。 importステートメントで問題が発生しています。React ES6をTypeScriptに移行する:import文が機能しない

現在、ES6がインストールされています。NPMを使用してNPM(例:npm install react)を使用して依存関係をインストールし、BabelをBrowserifyとともに使用して出力ES5バンドルを構築します。 (Browserifyを使用すると、私はちょうどTSは、プロジェクトでの作業を取得しようとしている、必須ではありません。)

典型的にはES6ファイルは次のようになりますリアクト:

import React from "react" 
import {Router, Route, Link} from "react-router" 
import Button from "./components/Button" 

export default class App extends React.Component { 
    render(){ 
     // ... 
    } 
} 

TSに移動し、私がインストールしましたTSC module: "commonjs"jsx: "react"を設定し、すべての私はtsd install react/を使用して依存関係を反応させるのためのd.tsファイルは、*.jsxから*.tsxにいくつかのファイルを変換し、そして私は、これらがimport文でコンパイルエラーを取得:

Error:(1, 8) TS1192: Module '"react"' has no default export.

import Buttonステートメントでエラーは発生しません。 TSCはNPMモジュールの依存関係を解決できないようです。

これを動作させるにはどうすればよいですか?

答えて

18

活字体1.8+

コンパイル--allowSyntheticDefaultImports -add "allowSyntheticDefaultImports": true

注tsconfig.json へ:tsconfig.jsonmoduleを設定するときに、これは私のために動作しません。 commonjsです。また

...

使用この代わりに:

import * as React from "react"; 
import * as Router from "react-router"; 

// use React, Router.Router, Router.Route, and Router.Link here 

herehere続きを読みます。現在react.d.tsexport =を使用していますので、import * as Reactでインポートする必要があります。

基本的に、これらのライブラリには1つのエクスポートしかありません。それはexport =という定義ファイルを表しています。

+0

ありがとう、それは動作します。違いが何であるかについてはまだ少し霧がかかっています。 '{router、route、link}は 'react-router'からどうなっていますか?それを行う方法はありますか? – Aaron

+0

受理されました。 :)まだ少し混乱しています...だから '* as'が必要なのは' d.ts'が 'export ='を使っているからですが、それはインポートされるES6 'export default'に相当すると思いました'import 'を使って' react 'からのReact?私がBabel/Browserifyと一緒に働いた理由はわかりませんが、TSCでセマンティクスが変わったようです。モジュールがどのように解決されているかの違いがあると思いますか? – Aaron

+0

私は 'ReactRouter.Router'構文についても不安です。既存のJSコードは 'Router'として機能したので、' import * as ReactRouter'はどのように実行時に動作しますか? – Aaron

関連する問題