2

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

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

这是我看到的警告:

忽略传递给 Connection: 类型的无效配置选项。这目前是一个警告,但在 MySQL2 的未来版本中,如果您将无效的配置选项传递给 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 不需要/不需要的附加参数。我是打字稿的新手。在将对象传递给 MysqlConnector 类之前,我尝试了这个:

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

但是我收到一个错误,说“过滤器”不是“DatabaseCredentials”类型的属性,我得出结论这可能不是正确的方法。

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

4

2 回答 2

1

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

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

这实质上是type从凭据中挑选出来的,validCredentials并将包含其余的属性。

.filter不起作用的原因是因为 filter 是数组的原型方法,而不是对象。

于 2018-09-05T17:00:05.033 回答
0

如果您坚持使用 Array 方法,.map()可能最有帮助:

let obj2big = { a: 1, b: 2, c: 3 }

// let's assume what you want from this is { a: 1, c: 3 }

let arr = [obj2big]

let result = arr.map(i=>({a:i.a, c: i.c}))

console.log(result[0])

于 2018-09-05T17:04:41.083 回答