2017-04-13 5 views
1

私が書いたコードで問題が発生しています。JSX webpackビルドの同じクラスのコンストラクタが重複しています

JSX Github Pageで使用できる主なJSXのチュートリアルでは、のように見えるポイントと呼ばれる例のクラスを、持っている:

class Point { 
 
    var x = 0; 
 
    var y = 0; 
 

 
    function constructor() { 
 
    } 
 

 
    function constructor(x : number, y : number) { 
 
     this.set(x, y); 
 
    } 
 

 
    function constructor(other : Point) { 
 
     this.set(other); 
 
    } 
 

 
    function set(x : number, y : number) : void { 
 
     this.x = x; 
 
     this.y = y; 
 
    } 
 

 
    function set(other : Point) : void { 
 
     this.set(other.x, other.y); 
 
    } 
 
}

クラスは、私は「複数のコンストラクタタイプの明確な例を持っていること私のC++の日々から馴染んでいます。それは定義されたコピーコンストラクタを持っています。私はそれが素晴らしいと思います。

しかし、私が得た、私が使用するための同様のクラスを作成する場合:私は私のWebPACKのビルドで次のエラーを取得する

export default class MutableDataStore { 
 
\t constructor() { 
 
\t \t this.data = []; 
 
\t \t this.settings = {}; 
 
\t } 
 

 
\t //Copy constructor 
 
\t constructor(other : MutableDataStore) { 
 
\t \t this.data = other.data.slice(); 
 
\t \t this.settings = Object.assign({}, this.settings); 
 
\t } 
 
    
 
    //...Other functions omitted 
 
}

:中

ERRORを./ src/stores/helper-classes/mutabledatastore.jsx モジュールのビルドに失敗しました:SyntaxError:同じクラス(8:1)に重複するコンストラクタ

一時的な問題でない限り、私はこれについてウェブ上で何か類似するものを見つけることができないので、私はこれで完全に困惑しています。

私webpack.config.jsは次のとおりです。

var webpack = require("webpack"); 
 
var path = require("path"); 
 
    
 
var src = path.resolve(__dirname, "src"); 
 
var app = path.resolve(__dirname, "app"); 
 
    
 
var config = { 
 
    entry: src + "/index.jsx", 
 
    output: { 
 
    path: app, 
 
    filename: "javascript.js" 
 
    }, 
 
    module: { 
 
    loaders: [{ 
 
     include: src, 
 
     loader: "babel-loader" 
 
    }] 
 
    } 
 
}; 
 
    
 
module.exports = config;

と私のバベルのプリセットはes2015あると反応します。

助けていただけたら幸いです!

+3

名前はひどいですが、 "JSX"チュートリアルページはJSXと呼ばれる言語のためのものですが、Reactが使用するJSXやBabelが扱うJSXではありません。 Babel/ReactのJSXの有無にかかわらず、複数の 'constructor'関数は通常のES6では使用できません。 – loganfsmyth

+0

@loganfsmyth質問に答えてくれてありがとう。私はあなたに答えを与えることができればと思います。なぜなら、それは私の問題が何であるか正確に答えたからです。 – aphenine

答えて

1

loganfsmythがコメントに述べたように、only be one constructor in an ES6 classがあります。あなたはサイドではなく、私はあなたが設定をコピーするコピーコンストラクタを意図しているかもしれないと思うように、他のは、構築物中またはパラメータ

export default class MutableDataStore { 
    constructor(other : MutableDataStore) { 
     this.data = other ? other.data.slice() : []; 
     this.settings = other ? Object.assign({}, other.settings) : {}; 
    } 

    //...Other functions omitted 
} 

// or 

export default class MutableDataStore { 
    constructor(other : MutableDataStore = { data: [], settings: {} }) { 
     this.data = other.data.slice(); 
     this.settings = Object.assign({}, other.settings); 
    } 

    //...Other functions omitted 
} 

のデフォルト値を提供することにより、設定されている場合、どちらかがチェックすることにより、所望の効果を得ることができますotherからは、thisではありません。

+0

ありがとう、それは便利です。他の人がそれをやる方法を見てみると面白いです。ええ、私は他人の設定をコピーするつもりでしたが、これは...私の問題は、Googleと私が与えた矛盾した情報を結びつけている他のJSXプロジェクトについては、特に混乱しているようです。 JSXが翻訳された言語であれば、そのような拡張機能が追加されている可能性があります。 – aphenine

+0

これらの例のコードは本質的にjsxではありません。反応コンテキストにおけるjsxは、javascriptコードでHTMLのようなタグを使用することを指します。 'render(){return

example
}'です。これらのクラスは、ECMAScript 6(ES6)準拠のJavaScriptです。 –

関連する問題