[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 공식문서