Lor*_*ord 12 node.js typescript graphql typescript-typings apollo-server
类型脚本显示错误,未提及每个参数的参数类型:
Mutation: {
createUser: (parent, args, context, info) =>{
}
Run Code Online (Sandbox Code Playgroud)
我可以使用任何类型来解决,但是正确的类型是什么?
Mutation: {
createUser: (parent: any, args: any, context: any, info: any) =>{
}
Run Code Online (Sandbox Code Playgroud)
sli*_*wp2 14
如果您启用所有严格的类型检查选项tsconfig.json
,则应该为所有内容添加 TS 类型。
我们来看看解析器的类型。
export declare type IFieldResolver<TSource, TContext, TArgs = Record<string, any>> = (source: TSource, args: TArgs, context: TContext, info: GraphQLResolveInfo & {
mergeInfo: MergeInfo;
}) => any;
Run Code Online (Sandbox Code Playgroud)
解析器参数:
parent
- 对于没有父级的顶级字段解析器(例如Query
,的字段Mutation
),该值为undefined
。所以TS类型是undefined
args
- 从类型中可以看出,它必须满足泛型约束中的类型参数Record<string, any>
。由于实际参数是从 Graphql 客户端传递的,因此我们需要Args
为每个解析器定义类型/接口。
context
- 这是一个通用参数,我们需要自己定义应用程序上下文接口。
info
- TS 类型已经存在GraphQLResolveInfo & { mergeInfo: MergeInfo }
一个工作示例:
例如
import express from 'express';
import { ApolloServer, gql, MergeInfo } from 'apollo-server-express';
import { GraphQLResolveInfo } from 'graphql';
const app = express();
const typeDefs = gql`
type User {
email: String!
}
type Query {
user: User
}
type Mutation {
createUser(email: String!, password: String!): Boolean
}
`;
export declare type IFieldResolver<TSource, TContext, TArgs = Record<string, any>> = (source: TSource, args: TArgs, context: TContext, info: GraphQLResolveInfo & {
mergeInfo: MergeInfo;
}) => any;
type CreateUserArgs = {
email: string;
password: string;
};
interface AppContext {
userService: UserService;
}
const resolvers = {
Query: {},
Mutation: {
createUser: (
parent: undefined,
args: CreateUserArgs,
context: AppContext,
info: GraphQLResolveInfo & { mergeInfo: MergeInfo },
) => {
console.log(parent);
return context.userService.createUser(args.email, args.password);
},
},
};
interface UserService {
createUser(email: string, password: string): boolean;
}
class UserServiceImpl {
createUser(email: string, password: string) {
return true;
}
}
const server = new ApolloServer({
typeDefs,
resolvers,
context: {
userService: new UserServiceImpl(),
},
});
server.applyMiddleware({ app, path: '/graphql' });
app.listen(8080, () => console.log('Apollo server started at http://localhost:8080'));
Run Code Online (Sandbox Code Playgroud)
软件包版本:
export declare type IFieldResolver<TSource, TContext, TArgs = Record<string, any>> = (source: TSource, args: TArgs, context: TContext, info: GraphQLResolveInfo & {
mergeInfo: MergeInfo;
}) => any;
Run Code Online (Sandbox Code Playgroud)
客户端的 GraphQL 查询:
mutation{
createUser(email: "teresa@gmail.com", password: "1234")
}
Run Code Online (Sandbox Code Playgroud)
回复:
import express from 'express';
import { ApolloServer, gql, MergeInfo } from 'apollo-server-express';
import { GraphQLResolveInfo } from 'graphql';
const app = express();
const typeDefs = gql`
type User {
email: String!
}
type Query {
user: User
}
type Mutation {
createUser(email: String!, password: String!): Boolean
}
`;
export declare type IFieldResolver<TSource, TContext, TArgs = Record<string, any>> = (source: TSource, args: TArgs, context: TContext, info: GraphQLResolveInfo & {
mergeInfo: MergeInfo;
}) => any;
type CreateUserArgs = {
email: string;
password: string;
};
interface AppContext {
userService: UserService;
}
const resolvers = {
Query: {},
Mutation: {
createUser: (
parent: undefined,
args: CreateUserArgs,
context: AppContext,
info: GraphQLResolveInfo & { mergeInfo: MergeInfo },
) => {
console.log(parent);
return context.userService.createUser(args.email, args.password);
},
},
};
interface UserService {
createUser(email: string, password: string): boolean;
}
class UserServiceImpl {
createUser(email: string, password: string) {
return true;
}
}
const server = new ApolloServer({
typeDefs,
resolvers,
context: {
userService: new UserServiceImpl(),
},
});
server.applyMiddleware({ app, path: '/graphql' });
app.listen(8080, () => console.log('Apollo server started at http://localhost:8080'));
Run Code Online (Sandbox Code Playgroud)
登录服务器端:
Apollo server started at http://localhost:8080
undefined
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7654 次 |
最近记录: |