typescript - Kartlägga resultat från SELECT direkt till en fördefinierad klass med pg-promise


Anta att jag har en klass

class Dog {
    id: number
    legs: number
}

och ett bord med samma egenskaper. Jag använder pg-promise för att fråga från databasen på följande sätt:

getDogs(): Promise<Dog[]> {
    return obj.any('SELECT id, legs FROM Dog')
}

och jag vill kalla denna funktion så här:

const dogs: Dog[] = await Database.getDogs()

Det jag vill är att resultatet automatiskt ska mappas till en array av hundar. Just nu måste jag iterera över resultatet och manuellt mappa varje resultat och sedan lägga till det i arrayen, och jag vill inte göra detta för varje objekt jag frågar från databasen.

Svar #1

Använd metoden Database.map<T=any> för det:

getDogs(): Promise<Dog[]> {
    return obj.map<Dog>('SELECT id, legs FROM Dog', [], a => new Dog(a));
}

Din klass skulle vara:

class Dog {
    constructor(row: any) {
        this.id = row.id;
        this.legs = row.legs;
    }
    id: number
    legs: number
}

Andra användbara länkar:

  • Metod Database.each<T=any>
  • Modulscheman