使用 protobufjs 的基本打字稿示例
Basic typescript example of using protobufjs
我目前正在我的打字稿项目中实施一些协议缓冲区翻译。我已经将原型文件加载到 ProtoBuilder 中(使用来自 protobufjs.d.ts 的打字稿定义文件)并且我已经从构建器返回了一个 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);
但如果存在的话,我更喜欢更优雅的解决方案。
使用现有 JavaScript 库的定义文件可能会很棘手,因为 JavaScript 的定义非常松散,而 TypeScript 的定义非常明确。如果不修改现有的 .d.ts 文件或编写您自己的文件,选项将受到限制。理论上,以下应该有效:
pb['decode'](buffer)
但你提到它没有。您设置中间变量的解决方法工作正常:
var decoder: any = pb["decode"];
decoder(buffer);
此代码类似于其他解决方法,即仅将 pb
声明为 any
。以下代码内联执行此操作:
(<any>pb).decode(buffer);
这段代码基本上是告诉 TypeScript 编译器"just pretend pb
is something that has a decode
method, or whatever"。
我目前正在我的打字稿项目中实施一些协议缓冲区翻译。我已经将原型文件加载到 ProtoBuilder 中(使用来自 protobufjs.d.ts 的打字稿定义文件)并且我已经从构建器返回了一个 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);
但如果存在的话,我更喜欢更优雅的解决方案。
使用现有 JavaScript 库的定义文件可能会很棘手,因为 JavaScript 的定义非常松散,而 TypeScript 的定义非常明确。如果不修改现有的 .d.ts 文件或编写您自己的文件,选项将受到限制。理论上,以下应该有效:
pb['decode'](buffer)
但你提到它没有。您设置中间变量的解决方法工作正常:
var decoder: any = pb["decode"];
decoder(buffer);
此代码类似于其他解决方法,即仅将 pb
声明为 any
。以下代码内联执行此操作:
(<any>pb).decode(buffer);
这段代码基本上是告诉 TypeScript 编译器"just pretend pb
is something that has a decode
method, or whatever"。