網站搜尋

javascript - 在 Typescript 中,knex 的預設回傳類型會是什麼?


我有以下函數,但我似乎無法弄清它的返回類型

export function save(contractType: ContractType, tx?: Knex.Transaction): any {
  return db
    .connection(tx)(CONTRACT_TYPE_TABLE)
    .insert(contractType)
    .catch(err => {
      throw new DatabaseError(en.GENERIC_ERROR, err);
    });
}

答案#1

根據 GitHub 上可用的類型定義,我假設你正在使用一個 QueryBuilder 實例。

interface QueryBuilder extends QueryInterface, ChainableInterface 

這意味著你的 Insert 方法會在實現了 QueryInterface 和 ChainableInterfaces 介面的對象上被調用。

Insert 被定義在 QueryInterface 介面中,並返回它被調用的 QueryBuilder。資訊不多。

看看 ChainableInterface,我們注意到它繼承了 BlueBird<any>。

interface ChainableInterface extends Bluebird<any> 

Bluebird 是眾多 JavaScript promise 函式庫之一。你可以在這裡閱讀更多相關資訊

所以,總結到目前為止我們所知道的一切...

插入返回 Bluebird<any>

看著 Bluebird 函式庫,似乎 Catch 回傳它被呼叫的 promise 物件(如同從 promise 函式庫所預期)。這意味著你的方法實際上回傳一個 Bluebird<any> 的 promise

至於實際類型……根據 Knex 文件中可用的範例,Insert 應該會返回一個包含已插入記錄索引的數組。因此,假設你處理的是返回數字數組的 Promise 應該是足夠安全的。

總結:

您的方法會回傳一個 QueryBuilder 物件,該物件可用來建立更多查詢(這應該是 ChainableInterface 的目的)。它 也應該 可以作為一個 Bluebird<number[]> 的 Promise 使用,如果需要,您可以用它來取得已插入紀錄的識別碼。