javascript - Få objection-modellen att returnera matchningen med TS-gränssnittet
Jag arbetar med att implementera ett API med Express/Objection JS och TypeScript.
Jag tog mycket inspiration från detta repo: https://github.com/HappyZombies/brackette-alpha/tree/master/server/src
Precis som skaparen, vill jag ha olika gränssnitt för en samma "komponent" (t.ex.: användare).
Vi kan se här att han skapar olika gränssnitt (här) och han använder dem i sina tjänster som ett returnerat löfte (här) men det finns ingen kontroll av att det han returnerade verkligen matchar hans gränssnitt. Till exempel: för att matcha hans lovade gränssnitt här kommer han bara att välja SQL-fälten som matchar hans gränssnitt.
public async findAll(): Promise<IUserMiminimum[]> {
let users;
try {
users = await this.usersModel.query().column('username', 'displayName');
} catch (err) {
this.logger.error(err);
throw err;
}
return users;
}Mina frågor är:
- Finns det ett sätt att endast välja de fält du vill ha från modellresultaten baserat på gränssnittsbeskrivningen?
- Annars, finns det ett sätt att kontrollera om gränssnittet matchar modellresultaten?
Tack för att du läste.
Svar #1
Invändning castTo() kan kanske hjälpa med det
const users= await User.query()
.column('username', 'displayName')
.castTo<IUser[]>();
