我试图弄清楚如何将属性类型设置为特定对象。
或者,为了更清楚地了解我的具体情况,我将所有模型注入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?
答案 0 :(得分:0)
您可以使用typeof
运算符来获取模型对象的类型。
const User = {
getUser
}
const Models = {
User
}
type GraphQLContext = {
models: typeof Models
}
中实现了这个想法