首页 > 解决方案 > 打字稿可选参数中断查询

问题描述

我正在尝试创建一个带有可选参数的函数,但是:

async find(query: string, parameters?: string): Promise<T[]> {
    const stmt: sqlite3.Statement = await this.db.prepare(query)
    const info: T[] = stmt.all(parameters)
    this.db.close()

    return info
}

如果我不提供参数,我仍然会收到错误:RangeError: Too many parameter values were provided,如果没有提供参数,我如何才能使参数实际上什么都没有?

标签: typescript

解决方案


您似乎正在使用sqlite3npm 包。我以前从未使用过这个库,但从他们的API 文档看来,您希望将对象或数组作为参数而不是简单的字符串作为参数传递(undefined如果您find只使用一个参数调用) .

// Key-value pairs as parameters
async find(query: string, parameters: Record<string, any> = {}): Promise<T[]> {
    const stmt: sqlite3.Statement = await this.db.prepare(query)
    const info: T[] = stmt.all(parameters)
    this.db.close()

    return info
}

// Array of parameters
async find(query: string, ...parameters: any[]): Promise<T[]> {
    const stmt: sqlite3.Statement = await this.db.prepare(query)
    const info: T[] = stmt.all(parameters)
    this.db.close()

    return info
}

推荐阅读