2017-09-27 9 views
2

にJSクラスを拡張する方法:例えば、私は<strong>ES6</strong>様クラス持っReasonML

class Foo {...}

を、私はそれを拡張したい:

class Bar extends Foo {...}

reason-reactドキュメント例が見つかりましたが、私にとってはそれが適切であるかどうかはわかりません:

let component = ReasonReact.reducerComponent "TodoAppRe"; 
let make _children => { 
    ...component, 
    initialState: fun() => {count: 0}, 
    <...> 

しかし、私はこのスタイルでコードを書くしようとすると、私はエラーを取得:

let myclass unit => { 
    ...mysuperclass, 
    hello: fun() => { 
     Js.log "FooBar"; 
    } 
}; 

Error: Unbound record field update

(この例ではmysuperclassは、サードパーティのJSライブラリからの外部にあります)。

多分私は何か間違っていますか?

答えて

2

let foo bar => { ...baz, quux: ... }は継承の構文ではありません。これは構図の構文です。具体的には、bazレコード値(オブジェクトではない)とそのquuxメンバー(メソッドではない)を更新しています。

Reason/BuckleScriptでJSクラスを拡張したい場合は、最初にBuckleScriptがES5と下位互換性のあるコードを生成するので、Babelを使用する必要はありません。実際、BuckleScriptはクラスの拡張を直接サポートしていません。

[%%bs.raw{| 
class Bar extends Foo { ... } 
|}] 

そして、あなたは以下のコードでBarクラスへの結合を書き込むことができます:あなたがしたい場合、あなたはBuckleScriptの[%%bs.raw]属性(https://bucklescript.github.io/bucklescript/Manual.html#_embedding_raw_js_code_as_statements)を使用して、あなたの理由ソースコード内の生のJavaScriptを含めることができ

しかし、それ。

ただし、このES2015以降、ES2015以前のブラウザと下位互換性を持たせたい場合は、Babelを使用して実行する必要があります。

関連する問題