首页 > 解决方案 > 如何使用 Flow 要求特定对象

问题描述

我试图弄清楚如何将属性类型设置为特定对象。

或者,为了更清楚地了解我的具体情况——我将我的所有模型都注入到 GraphQL 的上下文对象中。每个模型都是简单的对象,如下所示:

const getUser = (id: string): UserType => db.collections('User').find({ id })

const User = {
  getUser,
  // ...etc
}

解析器看起来像:

const user = (_: Object, args: GetUserArgs, ctx: GraphQLContext) => {
    ctx.models.User.getUser(args.input.id)
}

我可以像这样输入 GraphQLContext:

type UserModel = {
  getUser: (id: string): UserType
  // ... etc, for each function. But I've already typed `getUser` above.
}

type Models = {
  user: UserModel
}

type GraphQLContext = {
  models: Models
}

但是,随着我添加到模型中的功能在开发过程中不断增长和变化,这似乎很乏味且容易出错。有没有一种方法可以输入模型属性来获取已经应用于每个函数的所有类型定义?换句话说,有没有一种方法可以做到这一点而不必在两个地方都输入 getUser ?

这是一个例子

标签: javascriptgraphqlflowtype

解决方案


您可以使用typeof运算符来获取模型对象的类型。

const User = {
  getUser
}

const Models = {
  User
}

type GraphQLContext = {  
  models: typeof Models
}

我在你的例子中实现了这个想法


推荐阅读