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

Amplify中如何复用@model生成的CreateTodoItemInput输入类型?

解决Amplify自定义Lambda覆盖create mutation时复用默认输入类型的问题

你遇到的这个问题其实挺常见的——Amplify自动生成的CreateTodoItemInput这类输入类型,是在构建阶段基于你的@model模型动态生成的,并没有出现在你手写的schema.graphql文件里,所以直接在自定义mutation里引用它,schema验证环节肯定会报错说找不到这个类型。

目前没有办法直接复用这个自动生成的输入类型,不过有个简单的替代方案,而且不会影响前端的使用体验:

手动定义与自动生成结构一致的输入类型

你只需要在schema.graphql里手动写一个和Amplify自动生成的CreateTodoItemInput完全一样的输入类型,然后在自定义mutation里使用它就行。

举个例子,假设你的TodoItem模型是这样的:

type TodoItem @model {
  id: ID!
  content: String!
  completed: Boolean
}

那Amplify自动生成的CreateTodoItemInput会是:

input CreateTodoItemInput {
  content: String!
  completed: Boolean
}

你直接把这个输入类型复制到自己的schema.graphql里,再定义自定义的mutation:

# 手动定义和自动生成一致的输入类型
input CreateTodoItemInput {
  content: String!
  completed: Boolean
}

# 自定义mutation,用@function指向你的Lambda
type Mutation {
  createTodoItem(input: CreateTodoItemInput!): TodoItem @function(name: "createTodoItem-${env}")
}

这样做的好处是:

  • 前端生成的代码完全不需要改动,依然可以用原来的CreateTodoItemInput类型调用createTodoItem方法
  • 你的Lambda函数接收到的输入结构和默认mutation完全一致,不需要额外适配
  • Amplify在构建时会用你自定义的mutation覆盖默认的create mutation,不会产生冲突

注意事项

  • 后续如果修改了TodoItem模型的字段,一定要同步更新你手动定义的CreateTodoItemInput,保持结构一致,避免出现类型不匹配的问题
  • 如果你担心手动写容易出错,可以先执行一次amplify push(不添加自定义mutation),然后在amplify/generated/graphql/schema.graphql里找到自动生成的CreateTodoItemInput,直接复制过来用就行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 16:10:28