关于javascript:使用protobufjs的基本typescript示例

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);

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

1
(pb).decode(buffer);

此代码基本上是告诉TypeScript编译器"仅假装pb是具有decode方法的东西,或类似的东西"。