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[]>();

Relaterade artiklar