網站搜尋

javascript - 讓 objection 模型的返回值符合 TS 介面


我正在使用 Express/Objection JS 和 TypeScript 實作一個 API。

我從這個倉庫獲得了很多靈感:https://github.com/HappyZombies/brackette-alpha/tree/master/server/src

就像創建者一樣,我也想為同一個「元件」(例如:使用者)擁有不同的介面。

我們可以看到他這裡創建了不同的介面(這裡),並且他在他的服務中使用它們作為返回的 Promise(這裡),但沒有檢查他返回的是否符合他的介面。例如:要匹配他這裡承諾的介面,他將只選擇符合他介面的 SQL 欄位

  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;
  }

我的問題是:

  • 是否有一種方法可以根據介面描述僅選擇模型結果中你想要的欄位?
  • 否則,有沒有方法檢查介面是否符合模型結果?

感謝閱讀。

答案#1

反對 castTo() 可能有助於這個

const users= await User.query()
  .column('username', 'displayName')
  .castTo<IUser[]>();