【发布时间】:2020-03-09 19:22:42
【问题描述】:
我正在创建Nest.js 应用程序,我决定使用 GrapQL 创建我的项目。我阅读了一些文档,并决定采用 code first 方法(GraphQL 模式应该自动呈现自身)。对于这种方法,需要安装 type-graphql 这真的很酷,但是在我创建了一些只有主要类型的简单示例之后,我决定做一些更具挑战性的事情。
在我的应用程序中,我有 BlogEntity(来自那些 Entities type-graphql 正在生成 GraphQL 模式)正在使用 ArticleEntity,因为它需要向 posts、@987654326 添加输入@ 和 tutorials。我创建了解析器并为posts、projects 和tutorials 定义了@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