gpt4 book ai didi

javascript - 过滤掉 typescript 中不需要的接口(interface)对象属性

转载 作者:行者123 更新时间:2023-11-30 20:13:08 27 4
gpt4 key购买 nike

作为背景,我使用 Prisma (graphql)、mysql2 (nodejs) 和 typescript。

我正在使用交互式命令行脚本连接到 mysql2。

这是我看到的警告:

Ignoring invalid configuration option passed to Connection: type. This is currently a warning, but in future versions of MySQL2, an error will be thrown if you pass an invalid configuration options to a Connection

这就是我在 MysqlConnector 类中实例化 mysql2 的方式:

this.connectionPromise = await this.mysql.createConnection(this.connectionOptions)

“connectionOptions”在类构造函数中设置:

constructor(connectionDetails: MysqlConnectionDetails) {

这是我的类型定义:

export interface MysqlConnectionDetails {
host: string
port: number
user: string
password: string
database?: string
}

这是我传递给 MysqlConnector 类的对象的类型定义:

export interface DatabaseCredentials {
type: DatabaseType
host: string
port: number
user: string
password: string
database?: string
alreadyData?: boolean
schema?: string
ssl?: boolean
filter?: any
}

因此,我传递了一个对象,该对象具有 mysql2 不需要/不需要的额外参数。我是 typescript 的新手。在将对象传递给 MysqlConnector 类之前,我试过了:

let forDeletion = ['type', 'alreadyData']
connector = new MysqlConnector(credentials.filter(item => !forDeletion.includes(item)))

但我得到一个错误,说“filter”不是“DatabaseCredentials”类型的属性,我认为这可能不是正确的方法。

我假设 Typescript 中有一种方法(通过 tsconfig)自动过滤掉不在接收类型中的属性。 “MysqlConnectionDetails”在其定义中没有属性“type”,因此当我传入另一种类型时它会动态获取它。

最佳答案

不确定是否有特定的 TypeScript 方法来处理这个问题,但您可以为此使用解构/扩展:

const { type, ...validCredentials } = credentials;

这实际上是从凭据中挑选出 type,而 validCredentials 将包含其余属性。

.filter 不起作用的原因是 filter 是数组而非对象的原型(prototype)方法。

关于javascript - 过滤掉 typescript 中不需要的接口(interface)对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52190091/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com