2017-11-26 28 views
0

作業中のReactJSアプリケーションをTypeScriptに変換しようとしています。しかし、私はデフォルトのエクスポートを使用してインポート文を使用したいReactが定義されていません(未定義の 'createElement'プロパティを読み取れません)

import * as React from "react"; 

ので、私は、このように反応する荷重に反応するインポートすると

import React from "react"; 
import * as ReactDOM from "react-dom"; 
import Application from "./Application"; 

console.log(React); // undefined 

ReactDOM.render(
    <Application/>, window.document.getElementById("application-wrapper") 
); 

コンソールは<Application />

でエラーがスローされます私はすべての既存のコンポーネントで、このインポートの構文を使用して反応するインポートします

import React, {Component} from "react"; 

export default class Whatever extends Component<Props, State> { 
... 
} 

tsconfig.jsonファイルは、合成のデフォルトを許可するこの行が含まれています

"allowSyntheticDefaultImports": true 

マイwebpack.config.jsファイル:

let path = require("path"); 
let config = { 
    entry: "./src/main.tsx", 
    output: { 
     path: path.resolve(__dirname, "build"), 
     filename: "bundle.js" 
    }, 
    devtool: "source-map", 
    resolve: { 
     extensions: [".ts", ".tsx", ".js", ".jsx"] 
    }, 
    module: { 
     loaders: [ 
      { 
      test: /\.tsx?$/, 
      loader: "ts-loader", 
      exclude: /node_modules/ 
      } 
     ]  
    } 
}; 

module.exports = config; 

ない私はここに欠けているものを確認してください....

+0

にconsole.logステートメントは実行されませんアプリケーションを実行します。インポートまたはエクスポートされる関数は実行されます。 – stack26

+1

あなたはtsconfig.jsonを共有できますか?あなたは "モジュール"を持っていますか: "es6" – Kunukn

答えて

1

モジュールの解像度が少しありますTypescriptはBabelとWebpackとは異なるため、複雑です。 https://github.com/Microsoft/TypeScript/issues/5565#issuecomment-155216760

allowSyntheticDefaultImportsは、デフォルトの書き出しがないモジュールからのデフォルトのインポートを許可するようにTypescriptに指示しますが、発行されるコードは変更されません。そのため、モジュールを解決する責任をWebpackまたはBabelに移す必要があります。

Typescript設定ファイルでmoduleResolutionES6のセットを達成するには パイプラインは次のようになりますときに実際にあなた

TSコード=>(TypescriptCompiler)=> JSコードES6モジュールを搭載した=>(WebPACKのモジュールリゾルバ)=> JSコード

+0

ありがとう、仲間。正直言って、私は、仕事が始まるまで、tsconfigファイルで遊んで、この投稿を完全に忘れてしまった。しかし、この答えは最終的には何が問題を解決したのか、将来の検索の啓発のためにこの答えを受け入れることです。 – mwieczorek

関連する問題