#typescript #elasticsearch
#машинописный текст #elasticsearch
Вопрос:
Я хочу, чтобы мой API elasticsearch был как можно ближе к моей модели. Я хочу пользоваться преимуществами строгой типизации как на клиенте, так и на сервере.
У меня есть модель клиента:
export interface CustomerBody{
name?: string;
}
export class CustomerModel implements IElModel<CustomerBody>{
readonly index: string = "db";
readonly type: string = "customer";
id: string;
body: CustomerBody = {}
}
после сохранения этого документа я запускаю запрос, и запрос имеет другое отображение полей (в отличие от mongodb).
Результатом из базы данных является:
"hits": [
{
"_index": "db",
"_type": "customer",
"_id": "pVM963UBtjK7RM81ZgIx",
"_score": 1,
"_source": {
"name": "test"
}
},
{
"_index": "db",
"_type": "customer",
"_id": "p1NB63UBtjK7RM81kQIv",
"_score": 1,
"_source": {
"name": "test3111111"
}
}
]
используя драйвер nodejs, как я могу привязать этот результат к CustomerModel[]
?
если мне удастся это сделать, большая часть моей логики будет строго типизирована.
Спасибо
Ответ №1:
Я сам решал подобные ситуации. Мое решение состояло в том, чтобы отобразить массив обращений в мой интерфейс, который в вашем случае является классом.
const models: CustomerModel[] = hits.map(hit => {
const customer = new CustomerModel();
customer.id = hit._id;
customer.body = hit._source;
return customer;
});
Комментарии:
1. Спасибо, нет решения на уровне драйвера?
2. Они предоставляют эту документацию об использовании TypeScript. Похоже, они поддерживают дженерики, так что весь результат можно ввести. Но если вы хотите, чтобы результат уже был
CustomerModel[]
, то это, похоже, изначально не поддерживается.