使用protobufjs的基本打字稿示例

时间:2016-05-02 22:02:58

标签: javascript typescript protocol-buffers protobuf.js

我目前正在我的打字稿项目中实现一些协议缓冲区翻译。我已经将proto文件加载到ProtoBuilder中(使用来自protobufjs.d.ts的typescript定义文件)并且我从构建器返回了一个ProtoBuf。

如果我在名为pb的变量中使用ProtoBuf对象后设置断点,我可以在控制台中调用pb.decode(buffer)并且它可以工作。但是,TypeScript不喜欢语法。

经过多次戳刺和刺激,包括尝试:

pb["decode"](buffer)

(这给出了错误TS2349无法调用其类型缺少调用签名的表达式。)

我仍然无法像代码一样获得TypeScript编译器。

如何从TypeScript ProtoBuf对象获取埋在MetaMessage对象中的解码函数?

如果重要,我会在Visual Studio 2015中这样做。

编辑: 我可以使用以下方法解决问题:

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

但如果存在,我宁愿选择更优雅的解决方案。

1 个答案:

答案 0 :(得分:2)

使用现有JavaScript库的定义文件可能很棘手,因为JavaScript的定义非常松散,而TypeScript定义得非常好。在不修改现有.d.ts文件或编写自己的文件的情况下,选项是有限的。从理论上讲,以下内容应该有效:

pb['decode'](buffer)

但你提到它没有。您设置中间变量的解决方法可以正常工作:

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

此代码与其他解决方法类似,只是将pb声明为any。以下代码内联:

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

此代码基本上告诉TypeScript编译器“只是假装pb是具有decode方法的东西,或者其他什么”。