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, это похоже на антипаттерн