• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

entity.ts파일의 class 데이터 타입지정안됨 오류

23.08.10 22:44 작성 조회수 139

0

 entity.ts파일에서 input으로 사용할 틀을 resolver에서 Mutation쪽 service의 매개변수로 넘겨줄려고 사용했는데

Argument of type '{ inputStarbucks: InputStarbucks; }' is not assignable to parameter of type 'InputStarbucks'

이러한 오류가 나서 찾아보니 해당 타입으로는 변수타입을

지정할수없어서 변경하라고했는데

class틀도 문제가 없는데 왜 오류가 나는지 잘모르겠습니다.

import { Args, Mutation, Query, Resolver } from '@nestjs/graphql';
import { StarbucksService } from './starbucks.service';
import { InputStarbucks } from './entities/starbucks.input';
import { Starbucks } from './entities/starbucks.entity';

@Resolver()
export class StarbucksResolver {
  constructor(
    private readonly starbucksService: StarbucksService, // prettier때문에 아래로 내려쓰기가 안되니까 주석달기
  ) {}
  @Query(() => [Starbucks], { nullable: true })
  // graphql에서는 배열을 [Board]식으로 사용 아래에서는 Board[]라고 사용했는데
  fetchBoards(): Starbucks[] {
    return this.starbucksService.findAll();
  }

  @Mutation(() => String)
  creatBoard(
    // 한번에 사용하는 방식
    @Args('inputStarbucks') inputStarbucks: InputStarbucks,
    // graphql에서 데이터를 입력받고 변수명과 타입을 지정
    // graphql에서 writer로 입력받은값을 writer라는 변수에 받고 데이터 타입은 string으로 지정
  ): string {
    return this.starbucksService.create({ inputStarbucks });
    // return을 작성해야 사용한 api쪽 리턴이 module쪽까지 전달됨
  }
}
import { Injectable, Scope } from '@nestjs/common';
import { Starbucks } from './entities/starbucks.entity';
import { InputStarbucks } from './entities/starbucks.input';

@Injectable({ scope: Scope.DEFAULT })
export class StarbucksService {
  findAll(): Starbucks[] {
    // entity에서 만든 Board의 배열형태를 가져와서 사용
    const result = [
      { number: 1, writer: '짱구', title: '제목', contents: '내용이요' },
      { number: 2, writer: '짱구2', title: '제목2', contents: '내용이요2' },
      { number: 3, writer: '짱구3', title: '제목3', contents: '내용이요3' },
    ];
    return result;
  }

  create({ inputStarbucks }: InputStarbucks): string {
    console.log(inputStarbucks.writer); // 데이터 타입의 클래스의 명과 동일해야한다 .writer이부분이
    console.log(inputStarbucks.title);
    console.log(inputStarbucks.contents);
    return '게시물 등록 성공';
  }
}
import { Field, InputType } from '@nestjs/graphql';

// @ObjectType() // 이렇게 작성하면 type으로 나옴 . 리턴타입이 type이었을때
// mutation의 경우에는 input으로 작성했다
@InputType()
export class InputStarbucks {
  @Field(() => String)
  writer: string;

  @Field(() => String)
  title: string;

  @Field(() => String)
  contents: string;
}
// Graphql에서 사용하기위해서 graphql 데이터 타입지정

답변 1

답변을 작성해보세요.

0

안녕하세요! Daon님!

해당 스크린샷의 2번째 화면을 보니, { inputStarbucks }: InputStarbucks 로 타입을 지정하셨네요!

create({ inputStarbucks }: InputStarbucks): string {
    console.log(inputStarbucks.writer); // 데이터 타입의 클래스의 명과 동일해야한다 .writer이부분이
    console.log(inputStarbucks.title);
    console.log(inputStarbucks.contents);
    return '게시물 등록 성공';
  }

inputStarbucks의 타입이 InputStarbucks이므로,
inputStarbucks: InputStarbucks 와 같이 지정되어야합니다.(중괄호가 빠져야겠죠?!)

만약, 중괄호를 추가하고 싶으시다면,
{ inputStarbucks }: { inputStarbucks: InputStarbucks } 와 같이 지정되어야해요!
쉽게 이야기하면, ":"을 기준으로 왼쪽과 오른쪽의 구조가 동일해야합니다!