Я использую библиотеку 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