首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用protobufjs的基本类型记录示例

使用protobufjs的基本类型记录示例
EN

Stack Overflow用户
提问于 2016-05-02 22:02:57
回答 1查看 5.4K关注 0票数 4

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

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

在经历了很多刺激和刺激之后,包括尝试了如下的事情:

代码语言:javascript
复制
pb["decode"](buffer)

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

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

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

如果有关系的话,我在Visual 2015做这件事。

编辑:我可以使用:

代码语言:javascript
复制
var decoder: any = pb["decode"];
decoder(buffer);

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-16 22:24:08

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

代码语言:javascript
复制
pb['decode'](buffer)

但你说过没有。设置中间变量的解决方法很好:

代码语言:javascript
复制
var decoder: any = pb["decode"];
decoder(buffer);

这段代码类似于另一种解决方法,即只将pb声明为any。下面的代码是内联的:

代码语言:javascript
复制
(<any>pb).decode(buffer);

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36992363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档