作为背景,我正在使用Prisma(graphql),mysql2(nodejs)和打字稿。
我正在使用交互式命令行脚本连接到mysql2。
这是我看到的警告:
忽略传递给Connection:类型的无效配置选项。这个 当前是警告,但在MySQL2的未来版本中,将出现错误 如果您将无效的配置选项传递给 连接
这是我在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)))
但是我得到一个错误,说“过滤器”不是类型“ DatabaseCredentials”的属性,我得出结论,这可能不是正确的方法。
我认为Typescript中(通过tsconfig)有一种方法可以自动过滤出不在接收类型中的属性。 “ MysqlConnectionDetails”在其定义中没有属性“ type”,因此当我传入其他类型时,它会动态获取它。
答案 0 :(得分:1)
不确定是否有特定的TypeScript处理方式,但是您可以为此使用解构/传播:
const { type, ...validCredentials } = credentials;
这实际上是从凭据中选取type
,validCredentials
将包含其余属性。
.filter
不起作用的原因是因为filter是数组而不是对象的原型方法。
答案 1 :(得分: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])