Генерация определений типов из файла .protobuf с использованием результатов ts-protoc-gen только с необработанными определениями интерфейсов, за исключением прототипов jspb.Message - PullRequest
0 голосов
/ 26 октября 2019

Я использую библиотеку protobuf для генерации кода для структур данных, совместно используемых платформами. Одной из этих платформ является nodejs, поверх которой я использую машинопись. Поэтому помимо компилятора protoc (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)

, но результат, который я получаю, является просто необработанным интерфейсом, который на самом деленесовместим с сгенерированным кодом .js в файле _pb.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
...