【问题标题】:Why I am getting NoExplicitTypeError?为什么我收到 NoExplicitTypeError?
【发布时间】:2020-03-09 19:22:42
【问题描述】:

我正在创建Nest.js 应用程序,我决定使用 GrapQL 创建我的项目。我阅读了一些文档,并决定采用 code first 方法(GraphQL 模式应该自动呈现自身)。对于这种方法,需要安装 type-graphql 这真的很酷,但是在我创建了一些只有主要类型的简单示例之后,我决定做一些更具挑战性的事情。

在我的应用程序中,我有 BlogEntity(来自那些 Entities type-graphql 正在生成 GraphQL 模式)正在使用 ArticleEntity,因为它需要向 posts、@987654326 添加输入@ 和 tutorials。我创建了解析器并为postsprojectstutorials 定义了@ResolveProperty。当我尝试运行 nest start 命令时,我收到此错误:

抛出新的错误_1.NoExplicitTypeError(prototype.constructor.name, propertyKey, parameterIndex);

NoExplicitTypeError:您需要为 BlogEntity#posts 提供显式类型!

谁能解释我为什么会收到这个错误以及我应该怎么做才能修复它?

博客实体

import { Entity, Column, ObjectIdColumn } from 'typeorm';
import { Field, ID, ObjectType } from 'type-graphql';
import { ArticleEntity } from '../../articles/models/article.entity';

@Entity()
@ObjectType()
export class BlogEntity {
  @Field(() => ID)
  @ObjectIdColumn()
  _id: string;

  @Field()
  @Column()
  posts: ArticleEntity[];

  @Field()
  @Column()
  projects: ArticleEntity[];

  @Field()
  @Column()
  tutorials: ArticleEntity[];
}

博客解析器

@Resolver(() => BlogEntity)
export class BlogResolver {
  constructor(
    private readonly blogService: BlogService,
    private readonly articlesService: ArticlesService) {}

  @Query(() => String)
  async helloBlog(): Promise<string> {
    return 'Hello blog';
  }

  @ResolveProperty('posts', () => ArticleEntity)
  async getPosts(): Promise<ArticleEntity[]> {
    return await this.articlesService.findAll();
  }

  @ResolveProperty('projects', () => ArticleEntity)
  async getProjects(): Promise<ArticleEntity[]> {
    return await this.articlesService.findAll();
  }

  @ResolveProperty('tutorials', () => ArticleEntity)
  async getTutorials(): Promise<ArticleEntity[]> {
    return await this.articlesService.findAll();
  }

}

如果你还有什么需要可以在评论区联系我

【问题讨论】:

  • 当没有与BlogEntity 相关的@Query()@Mutation() 装饰器时,为什么到处都有@ResolverProperty
  • 我想我不理解你的问题,但我添加了@ResolverProperty,因为没有这个我也收到了这个错误,但我发现这个issue有soullution所以我决定试试这个但它没有没用
  • 到目前为止,您无法运行 graphql 请求来获取BlogPost,因为没有与BlogEntity 相关的@Query()@ResolverProperty() 用于定义如何解析原始查询对象的properties
  • 我明白,我添加它只是为了进行某种测试(我遇到了这个错误,我想也许通过添加这个我可以解决我的问题)。那么我应该如何摆脱这个错误(我认为这是因为我的 BlogEntity 中有这个未解决的自定义类型)?
  • 我相信您应该添加某种@Query() 方法来解析为BlogEntity,类似于您的helloBlog 解析为字符串的方式

标签: typescript graphql nestjs typegraphql


【解决方案1】:

所以问题不在@ResolverProperty 和我的解析器中。此错误的问题在于 BlogEntity 字段的定义:postsprojectstutorials。你可以问为什么?因此,对于不是主要类型的每种类型(期望数字,您还必须定义它将是 Float 或可能是 Integer)以及对于作为 array 甚至主要类型数组的每个字段,例如字符串还必须定义一个类型的returnig 值。怎么做,只需要在@Field()装饰器上加上returnTpyFunction即可。

示例

@Entity()
@ObjectType()
export class BlogEntity {
  @Field(() => ID)
  @ObjectIdColumn()
  _id: string;

  @Field(() => [ArticleEntity])
  @Column()
  posts: ArticleEntity[];

  @Field(() => [ArticleEntity])
  @Column()
  projects: ArticleEntity[];

  @Field(() => [ArticleEntity])
  @Column()
  tutorials: ArticleEntity[];
}

【讨论】:

    猜你喜欢
    • 2017-08-17
    • 2020-09-18
    • 2012-05-27
    • 2020-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多