Как сгенерировать объект из proto map

#typescript #protocol-buffers #proto #protoc #grpc-web

#typescript #протокол-буферы #proto #протокол #grpc-web

Вопрос:

У меня есть следующий proto, который определяет словарную карту, при преобразовании в typescript этот тип возвращается как массив кортежей Array<[string,string]> , однако я хотел бы, чтобы он был объектом пар ключ: значение. Возможно ли это? Должен ли я использовать другой тип на стороне proto?

 message Dictionary {
    map<string, string> pairs = 1;
}
 

Для создания веб-вывода и типов typescript я использую grpc-tools protoc.exe с --js_out=import_style=commonjs,binary помощью и --grpc-web_out=import_style=commonjs dts,mode=grpcwebtext

Комментарии:

1. У меня такая же проблема, вы нашли решение?

Ответ №1:

В документации предлагается использовать getPairsMap() в своем Dictionary сообщении:

https://developers.google.com/protocol-buffers/docs/reference/javascript-generated#map

Затем у toObject него есть функция:

https://github.com/protocolbuffers/protobuf/blob/8080bebf1f2ff87ef96a24135afe7f82d2eb3d2a/js/map.js#L148

Я этого не пробовал.

Комментарии:

1. Нет никакой разницы между getPairsMap().toArray() и getPairsMap().toObject() оба возвращаются [string,string][] . Что странно, я думаю, глядя на объект, возвращаемый, getPairsMap есть поле _map , которое я хотел бы извлечь из него, но не могу найти способ его получить. Существует forEach метод, который я могу использовать для заполнения объекта const pairs:Record<string,string> = {}; getPairsMap().forEach((entry: string, key: string):void=> { pairs[key]=entry; });