ts-protoc-gen добавление списка к повторяющимся элементам

У меня есть такое сообщение proto(3):

message DataAggregated {
   repeated Data data = 1;
}

message Data {
   string example = 1
}

Когда сгенерированные типы для этого определения прототипа, слово "Список" добавляется к повторяющимся полям. Почему это так, есть ли законная причина и есть ли способ остановить это добавление? это вызывает сильные головные боли.

export namespace DataAggregated {
    export type AsObject = {
        dataList: Array<Data.AsObject>,
    }
}

Проблема

Примечание: я использую AsObject поверх экземпляров класса по причинам, которые сложно объяснить здесь, и выходят за рамки этого вопроса

Это ничего не возвращает по GRPC

  // I cannot use a return interface here as dataList is not part of the underlying
  // GRPC message so i must return data
  get() {
     return {
       dataList: ['string', 'string']
     }
  }

Это возвращает данные

  // I cannot use a return interface here as data does not exist in the interface
  get() {
     return {
       data: ['string', 'string']
     }
  }

При вызове функции с другого сервера

 export interface ServiceInterface {
     get(data: Empty, metadata: Metadata): Observable< DataAggregated.AsObject>;
 }

 ....

const res = get();
console.log(res.data)     // TsErr: Property 'data' does not exist on type 'AsObject'.ts(2339)
console.log(res.dataList) // undefined

Это делает написание повторяющихся полей бесполезным, если вы не решите использовать классы. зачем добавлять список, когда GRPC ожидает данные вместо dataList, это похоже на антипаттерн

0 ответов

Другие вопросы по тегам