2

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

问题是 pbts 输出使每个属性未定义或为空,例如

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

interface IMyThing { myProp: string; }

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

message MyThing { string myProp = 1; }

是否有一些标志或方法来调整 pbts 的源代码或对其输出进行后处理,以便我可以删除这些不正确的未定义/空属性?

4

2 回答 2

2

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

于 2019-05-09T23:27:41.310 回答
0

对于 proto3 语法:

虽然消息字段始终是可选的,但像字符串这样的标量字段始终是必需的。

myProp: string正确的表示也是如此。

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

protobuf 3.12.0 中有一个新的实验性功能,允许将字符串字段设为可选。那么签名应该是myProp?: stringor myProp: string | undefined

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

于 2020-09-04T17:38:48.473 回答