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

GraphQL与TypeScript:输入对象默认值填充时机及增改最优方案

解决方案

1. 定义基础字段基类

先创建一个不带@InputType装饰的抽象基类,统一维护所有字段的名称与默认值,避免重复定义:

abstract class BaseEntryMeaningFields {
  headword: string = "";
  definition: string = "";
  usage: string = "";
  imageLink: string = "";
  notes: string = "";
}

2. 实现专用输入类型

基于基类分别创建创建、更新操作的输入类型,通过@Field的nullable参数控制字段可选性:

创建用输入类型(允许部分字段提交)

将所有字段设为可选(nullable: true),保留空字符串默认值,用户可仅提交部分字段:

@InputType()
export class CreateEntryMeaningInput extends BaseEntryMeaningFields {
  @Field(() => String, { nullable: true })
  headword: string = "";

  @Field(() => String, { nullable: true })
  definition: string = "";

  @Field(() => String, { nullable: true })
  usage: string = "";

  @Field(() => String, { nullable: true })
  imageLink: string = "";

  @Field(() => String, { nullable: true })
  notes: string = "";
}

更新用输入类型(强制提交所有字段)

不设置nullable: true(默认必填),也不提供默认值,强制用户提交完整字段:

@InputType()
export class UpdateEntryMeaningInput extends BaseEntryMeaningFields {
  @Field(() => String)
  headword: string;

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

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

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

  @Field(() => String)
  notes: string;
}

3. 在解析器中使用对应输入类型

创建操作接收CreateEntryMeaningInput,更新操作接收UpdateEntryMeaningInput,利用类默认值或手动合并完成字段填充:

// 创建操作解析器
@Mutation(() => Meaning)
createMeaning(
  @Arg("input", () => CreateEntryMeaningInput) input: CreateEntryMeaningInput
) {
  // 合并输入与默认值(若需覆盖类默认值可手动处理)
  const meaningData = { ...new BaseEntryMeaningFields(), ...input };
  return this.meaningService.create(meaningData);
}

// 更新操作解析器
@Mutation(() => Meaning)
updateMeaning(
  @Arg("id") id: string,
  @Arg("input", () => UpdateEntryMeaningInput) input: UpdateEntryMeaningInput
) {
  return this.meaningService.update(id, input);
}

方案优势

  • 低冗余:基类集中管理字段定义,子类仅需调整字段校验规则,避免重复代码。
  • 强校验:通过GraphQL输入类型的静态校验,在请求层面拦截非法输入,减少业务层判断逻辑。
  • 高可读性:专用输入类型明确区分创建、更新的不同规则,代码语义清晰。

内容的提问来源于stack exchange,提问作者vls9

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 15:15:02