如何使用Flow要求特定对象

时间:2018-07-10 03:36:58

标签: javascript graphql flowtype

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

或者,为了更清楚地了解我的具体情况,我将所有模型注入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
}

但是,这似乎乏味且容易出错,因为我要添加到模型中的函数在开发过程中会不断增长和变化。有没有一种方法可以键入models属性,该属性将获取已经应用于每个函数的所有类型定义?换句话说,有没有一种方法可以不必在两个地方都键入getUser?

Here's an example

1 个答案:

答案 0 :(得分:0)

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

const User = {
  getUser
}

const Models = {
  User
}

type GraphQLContext = {  
  models: typeof Models
}

我在your example

中实现了这个想法