Basic typescript example of using protobufjs
我目前正在我的typescript项目中实现一些协议缓冲区转换。我已经将proto文件加载到ProtoBuilder中(使用protobufjs.d.ts中的typescript定义文件),并且从构建器返回了ProtoBuf。
如果在将ProtoBuf对象包含在名为pb的变量中之后设置断点,则可以在控制台中调用pb.decode(buffer),并且它可以正常工作。但是,TypeScript不喜欢这种语法。
经过很多戳戳和刺探,包括尝试以下操作:
1 | pb["decode"](buffer) |
(这将导致错误TS2349无法调用类型缺少调用签名的表达式。)
我仍然无法像代码一样获得TypeScript编译器。
我如何从TypeScript ProtoBuf对象转到埋在MetaMessage对象中的解码函数?
如果有关系,我正在Visual Studio 2015中进行此操作。
编辑:
我可以使用以下方法解决问题:
1 2 | var decoder: any = pb["decode"]; decoder(buffer); |
但是如果有的话,我希望有一个更优雅的解决方案。
使用现有JavaScript库的定义文件可能很棘手,因为JavaScript的定义非常松散,而TypeScript的定义非常好。在不修改现有.d.ts文件或编写自己的文件的情况下,这些选项受到限制。从理论上讲,以下应该起作用:
1 | pb['decode'](buffer) |
但是您没有提到。您设置中间变量的解决方法可以正常工作:
1 2 | var decoder: any = pb["decode"]; decoder(buffer); |
此代码与其他解决方法类似,只是将
1 | (pb).decode(buffer); |
此代码基本上是告诉TypeScript编译器"仅假装