2016-05-02 10 views
2

現在、私のtypescriptプロジェクトでいくつかのプロトコルバッファ翻訳を実装しています。 protoファイルをProtoBuilderにロードし(protobufjs.d.tsのtypescript定義ファイルを使用)、私はビルダーからProtoBufを返しました。基本型スクリプトprotobufjsを使用した例

私はProtoBufオブジェクトをpbという名前の変数に入れた後にブレークポイントを設定すると、コンソールでpb.decode(バッファ)を呼び出すことができます。しかし、TypeScriptは構文が気に入らない。以下のような試みるものを含む多くの突きと催促、後

pb["decode"](buffer) 

(これはエラーTS2349は、そのタイプのコールサインを欠い表現を呼び出すことはできませんできます。)

私はまだ活字体コンパイラを取得することはできませんコードのように。

TypeScript ProtoBufオブジェクトからMetaMessageオブジェクト内に埋め込まれたデコード関数に到達するにはどうすればよいですか?

重要な場合は、Visual Studio 2015でこれを行います。

編集:

var decoder: any = pb["decode"]; 
decoder(buffer); 

しかし、存在する場合、私はよりエレガントな解決策を好むだろう: 私が使用して問題を回避することができます。

+0

私はprotobufについて何も知らないけど、TypeScriptでは 'pb ['decode'](buffer)'や '( pb).decode(buffer)'を実行できるはずです。 –

+0

最初のオプション(私の質問で明らかに四角い中括弧が削除されていました)は有効ではありませんでしたが、 var decoder:any = pb ['decode']; は私にデコーダ(バッファ)への呼び出しを許可しました。私はもっ​​と見栄えの良い答えを期待していますので、少し開けておきますが、将来的には便利になる可能性があるので、確かに( pb)ビットを感謝します。 – Chris

+0

"有効ではありませんでした"?ビルドエラーが発生しましたか?もしそうなら、あなたの質問にそれを加えることは非常に役に立ちます... –

答えて

2

既存のJavaScriptライブラリの定義ファイルを操作するのは難しい場合があります.JavaScriptは非常にゆるやかに定義されていますが、TypeScriptは非常によく定義されています。既存の.dtsファイルを変更したり、独自のファイルを作成することなく、オプションが制限されます。理論的には、次のように動作するはずです。

pb['decode'](buffer) 

しかし、あなたはそれは言いませんでした。中間変数を設定するあなたの問題を回避するには、正常に動作します:

var decoder: any = pb["decode"]; 
decoder(buffer); 

このコードだけanyとしてpbを宣言することで、他の問題を回避する、に似ています。このコードは、基本的には「ちょうどpbdecode方法、または何を持っているものであるふりをする」活字体コンパイラを語っている

(<any>pb).decode(buffer); 

:次のコードは、このインラインを行います。

関連する問題