You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

指定UsersListResponse.users为可空仍报错:无法为非空字段返回null

解决TypeGraphQL中UsersListResponse.users返回null的报错问题

问题原因

你遇到的错误Cannot return null for non-nullable field UsersListResponse.users,说明GraphQL Schema里users字段被标记为非空,但你实际返回了null。尽管你在@Field装饰器中设置了{ nullable: true },仍可能存在以下问题:

  1. TypeGraphQL的数组字段可空配置未正确生效
  2. 返回逻辑中直接将users赋值为null,而非符合语义的空数组
  3. TypeScript类型与GraphQL Schema的映射存在偏差

解决方案

方案1:返回空数组替代null(推荐)

从语义上来说,没有用户数据时返回空数组[]比null更合理,也能直接避免该报错。修改Resolver逻辑:

async getUsersList(
    @Ctx() { req }: AppContext,
    @Arg("offset", { nullable: true }) offset?: number,
    @Arg("limit", { nullable: true }) limit?: number,
    @Arg("orderBy", { nullable: true }) orderBy?: string,
    @Arg("orderType", { nullable: true }) orderType?: string,
): Promise<UsersListResponse> {
    // 假设原逻辑中users可能为null
    let users = await yourDataSource.getUsers(...);
    // 将null替换为空数组
    users = users ?? [];

    return {
        users,
        hasMore: ...,
        errors: ...
    };
}

方案2:确保TypeGraphQL正确生成可空字段

检查UsersListResponse的users字段配置,显式指定TypeScript类型匹配可空设置:

@ObjectType()
export class UsersListResponse {
    @Field(() => [FieldError], { nullable: true })
    errors?: FieldError[];

    @Field(() => [User], { nullable: true })
    users?: User[] | null; // 显式允许null值

    @Field(() => Boolean, { nullable: true })
    hasMore?: boolean;
}

方案3:验证Schema生成结果

通过GraphQL Playground或打印生成的Schema,确认users字段的定义是否为[User]?(可空)。如果Schema中仍显示users: [User]!,说明@Field的nullable: true未生效,可尝试:

  • 更新TypeGraphQL到最新版本
  • 检查是否有其他装饰器或全局配置覆盖了该字段的可空性

内容的提问来源于stack exchange,提问作者Cătălin Avasiloaie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 17:45:42