过滤出打字稿中不需要的接口对象属性

时间:2018-09-05 16:53:46

标签: javascript typescript prisma

作为背景,我正在使用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”,因此当我传入其他类型时,它会动态获取它。

2 个答案:

答案 0 :(得分:1)

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

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

这实际上是从凭据中选取typevalidCredentials将包含其余属性。

.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])

相关问题