javascript - 如何使用 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 ?
解决方案
您可以使用typeof
运算符来获取模型对象的类型。
const User = {
getUser
}
const Models = {
User
}
type GraphQLContext = {
models: typeof Models
}
我在你的例子中实现了这个想法
推荐阅读
- javascript - 从数据库到输入的日期时间格式 type='datetime' PHP
- angular - Angular 7:路由到另一个应用程序时如何构建脚本和样式
- spring - 如何在没有代码的情况下从“Spring Tool Suite”可执行文件中共享 Spring MVC 项目?
- javascript - Python/Flask/HTML - 在新窗口而不是主页中呈现 HTML
- java - 如何从多个输入 xml 构建 XML
- c++ - 使用 std::move 将 unique_ptr 移动到向量中
- amazon-web-services - 将域指向 Route 53
- python - VGG16 Tensorflow 实现在 cifar-10 上不学习
- mysql - 如何在 SQL 中将多行合并为一行?
- r - For 循环检索超过 1 个返回值(维数不正确)