使用protobufjs的基本typescript示例

Basic typescript example of using protobufjs

本文关键字:typescript 示例 protobufjs 使用      更新时间:2023-09-26

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

如果我在一个名为pb的变量中拥有ProtoBuf对象后设置了一个断点,我可以在控制台中调用pb.decode(缓冲区),它就可以工作了。然而,TypeScript不喜欢这种语法。

经过多次试探,包括尝试以下内容:

pb["decode"](buffer)

(这导致错误TS2349无法调用类型缺少调用签名的表达式。)

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

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

如果重要的话,我在Visual Studio 2015中做这件事。

编辑:我可以使用来解决这个问题

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

但我更喜欢一个更优雅的解决方案,如果有的话。

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

pb['decode'](buffer)

但你没有提到。您设置中间变量的变通方法效果良好:

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

此代码类似于其他解决方法,即仅将pb声明为any。以下代码在线执行此操作:

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

这段代码基本上是告诉TypeScript编译器"假装pb是有decode方法的东西,或者其他什么"。