typescript - 使用 ts-protoc-gen 从 .protobuf 文件生成类型定义,结果仅包含原始接口定义,除了 jspb.Message 原型
问题描述
我正在使用protobuf库来为平台之间共享的数据结构生成代码。其中一个平台是 nodejs,我在上面使用 typescript。所以除了协议编译器(https://developers.google.com/protocol-buffers/docs/reference/javascript-generated)我还使用ts-protoc-gen插件(https://github.com/improbable-eng/ts -protoc-gen ) 以生成类型定义,以便对生成的代码使用静态类型。
ts-protoc-gen 不仅应该生成简单的接口定义,还应该基于 .proto 文件中定义的消息生成实际的类定义。我已经为其中一个插件示例 orphan.proto 生成了类型定义。 https://github.com/improbable-eng/ts-protoc-gen/blob/master/proto/orphan.proto 提供了应该生成的结果,例如。对于 OrphanMessage 看起来像这样:
export class OrphanMessage extends jspb.Message {
getMyString(): string;
setMyString(value: string): void;
getMyBool(): boolean;
setMyBool(value: boolean): void;
getMyEnum(): OrphanEnumMap[keyof OrphanEnumMap];
setMyEnum(value: OrphanEnumMap[keyof OrphanEnumMap]): void;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): OrphanMessage.AsObject;
static toObject(includeInstance: boolean, msg: OrphanMessage): OrphanMessage.AsObject;
static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
static serializeBinaryToWriter(message: OrphanMessage, writer: jspb.BinaryWriter): void;
static deserializeBinary(bytes: Uint8Array): OrphanMessage;
static deserializeBinaryFromReader(message: OrphanMessage, reader: jspb.BinaryReader):
}
(来源https://github.com/improbable-eng/ts-protoc-gen/blob/master/examples/generated/proto/orphan_pb.d.ts)
但我得到的结果只是一个原始接口,实际上由于样式不同,它与 _pb.js 文件中生成的 .js 代码不兼容。
export interface OrphanMessage {
my_string?: string;
my_bool?: boolean;
my_enum?: OrphanEnum;
}
有人知道为什么我没有得到 jspb.Message 原型吗?我使用以下命令生成带有类型定义的 .js 代码
protoc --plugin="/protoc-gen-ts=${PROTOC_GEN_TS_PATH}" --js_out="import_style=commonjs,binary:%TARGET_PATH%" --ts_out=%TARGET_PATH% %SOURCE_PROTO_FILE_NAME%.proto
解决方案
推荐阅读
- node.js - Typescript 和 Googleapis 使用的内存激增
- ruby - 如何在一个已经存在的 Grape::API 端点之后添加一个?
- c# - 如何测试字节数组中的像素是否为白色?
- android - androidx 工作管理器问题 - “java.lang.IllegalStateException:无法解析结果路径字符串:”
- android - 如何在 appium 测试框架中使用 XPath 访问和单击反应原生元素?
- reactjs - setState 只更新一些值
- java - 接口上的显式类与泛型
- javascript - 异步调用后 React Context API 不更新状态
- r - 在每个组的变量上映射摘要
- angular - 是否可以仅重定向未找到路由的查询参数?