protobuf.js pbts:从.proto生成打字稿类型,不包含null |未定义

时间:2019-03-21 23:40:42

标签: typescript protobuf.js

我正在使用pbts为大型protobuf库生成打字稿声明文件。

问题是pbts输出使每个属性都不确定或为空,例如

interface IMyThing { myProp?: string | null; } 而我想要的是:

interface IMyThing { myProp: string; }

实际的protobuf定义不是可选的。它们看起来像:

message MyThing { string myProp = 1; }

是否有一些标记或方法可以调整pbts的源代码或对其输出进行后处理,以便删除这些不正确的undefined / null属性?

2 个答案:

答案 0 :(得分:0)

更新:由于protobuf 3中的所有消息都是可选的,因此这是设计使然。

答案 1 :(得分:0)

对于proto3语法:

虽然消息字段始终是可选的,但始终需要标量字段(例如字符串)。

所以myProp: string是正确的表示形式。

在二进制连线格式中,根本不会写入空字符串。但是,当从不包含该字段数据的二进制数据中读取数据时,生成的代码应将默认值设置为“

”。

protobuf 3.12.0中有一个新的实验功能,它允许将字符串字段设为可选。然后签名应该为myProp?: stringmyProp: string | undefined

我建议看一下ts-proto或(这对我的实现来说是个无耻的插件)protobuf-ts