[typescript] GraphQL-js에서의 타입 변환 및 캐스팅 처리 방법
GraphQL-js는 GraphQL 쿼리와 서버 사이의 효율적인 통신을 제공하는 도구입니다. TypeScript를 사용하여 GraphQL-js를 사용하는 경우, 반환된 데이터의 타입 변환 및 캐스팅에 대한 처리가 필요합니다. 이때, 다음과 같은 방법을 사용할 수 있습니다.
1. GraphQL 스키마 정의
먼저, GraphQL 스키마를 정의합니다. 이때, graphql
모듈을 이용하여 GraphQLSchema
및 다양한 타입을 정의합니다.
import { GraphQLObjectType, GraphQLString, GraphQLSchema } from 'graphql';
// UserType 정의
const UserType = new GraphQLObjectType({
name: 'User',
fields: {
id: { type: GraphQLString },
name: { type: GraphQLString },
},
});
// Query 타입 정의
const QueryType = new GraphQLObjectType({
name: 'Query',
fields: {
user: {
type: UserType,
resolve: (root, args, context, info) => {
// 사용자 데이터 반환
return { id: '1', name: 'John' };
},
},
},
});
// Schema 정의
export const schema = new GraphQLSchema({
query: QueryType,
});
위의 코드에서 UserType
은 유저 타입을, QueryType
은 쿼리 타입을 정의하고, schema
은 이를 결합하여 스키마를 정의합니다.
2. Type 변환 및 캐스팅
반환된 데이터의 타입을 변환하고 캐스팅하기 위해서는, 다음과 같이 GraphQLResolveInfo
객체를 이용하여 반환된 데이터를 적절한 타입으로 변환할 수 있습니다.
import { graphql, GraphQLResolveInfo } from 'graphql';
import { schema } from './schema';
// 유저 정보 조회 함수
const fetchUserInfo = async (userId: string, info: GraphQLResolveInfo) => {
// userId를 이용하여 사용자 정보 조회
const user = await db.getUserById(userId);
// 반환된 데이터의 타입 변환 및 캐스팅 처리
const userInfo = info.mergeInfo.datLoader.load('user', user.id);
return userInfo;
};
// 사용자 정보 조회
const userInfo = fetchUserInfo('1', info);
위의 코드에서는 fetchUserInfo
함수를 통해 반환된 데이터를 GraphQLResolveInfo
를 통해 타입 변환과 캐스팅 처리하고 있습니다.
결론
TypeScript를 사용하여 GraphQL-js를 다루는 경우, 반환된 데이터의 타입 변환 및 캐스팅 처리가 중요합니다. graphql
모듈을 이용하여 스키마를 정의하고, GraphQLResolveInfo
를 활용하여 반환된 데이터를 적절한 타입으로 변환할 수 있습니다.
이를 통해 안전하고 효율적인 GraphQL-js 및 TypeScript 개발을 진행할 수 있습니다.
참고: GraphQL 공식문서, TypeScript 공식문서