关系在TypeGraphQL中无法正常工作(您需要为...提供显式类型)

时间:2019-11-05 14:35:11

标签: javascript graphql typeorm type-graphql

我想在用户和TypeGraphQL中的文档之间创建一个简单的关系。因此,用户可以创建无限的文档,而一个文档只有一个创建者。但是我收到一个错误。

用户

import { Entity, PrimaryGeneratedColumn, Column, BaseEntity, OneToMany } from "typeorm";
import { Field, ID, ObjectType } from "type-graphql";

import { Doc } from "./Doc";

@ObjectType()
@Entity()
export class User extends BaseEntity {
    @Field(() => ID)
    @PrimaryGeneratedColumn()
    id: number;

    @Field()
    @Column()
    firstName: string;

    @Field()
    @Column()
    lastName: string;

    @Field()
    @Column()
    nickname: string;

    @Field()
    @Column("text", { unique: true })
    email: string;

    @Column()
    password: string;

    @Field({ nullable: true })
    @Column()
    created: Date;

    @Field()
    @Column()
    gender: string;

    @OneToMany(() => Doc, doc => doc.creator)
    createdDocs: Promise<Doc[]>;
}

文档

import { Entity, PrimaryGeneratedColumn, Column, BaseEntity, ManyToOne } from "typeorm";
import { Field, ID, ObjectType } from "type-graphql";

import { User } from "./User";

@ObjectType()
@Entity()
export class Doc extends BaseEntity {
    @Field(() => ID)
    @PrimaryGeneratedColumn()
    id: number;

    @Field({ nullable: true })
    @Column()
    created: Date;

    @Field()
    @Column()
    @ManyToOne(() => User, user => user.createdDocs)
    creator: Promise<User>;
}

错误

throw new errors_1.NoExplicitTypeError(prototype.constructor.name, propertyKey, parameterIndex);
              ^
Error: You need to provide explicit type for Doc#creator !

但是导致这种情况发生的原因是什么?当然,表doc中的列创建者不是真正的“数据类型”,因为它不应该是“静态”的。它必须是一个关系,并且该关系显然不能具有“数据类型”。

2 个答案:

答案 0 :(得分:1)

我发现了我的错误...

无需声明与@Field()@Column()的关系

答案 1 :(得分:1)

  

错误:您需要为Doc#creator提供显式类型!

这意味着,当您的媒体资源类型为Promise<User>时,反射类型为Object。在这种情况下,TypeGraphQL需要装饰器中的显式类型,例如@Field(type => User)