@ObjectType() defines a GraphQL output type that can contain resolvers, computed fields, and relations. @InputType() defines a GraphQL input type where all fields must be serializable scalars or nested input types. They are distinct schema types and NestJS will throw a runtime error if you try to use an @ObjectType() as a mutation argument.
@ObjectType() — output only; can contain resolver methods, computed properties, and lazy-loaded relations.
@InputType() — input only; all fields must be serializable scalars or nested @InputType() classes.
GraphQL schema has separate type registries for Input and Object types — they cannot be mixed.
OmitType(User, ['id'], InputType) re-registers fields from an @ObjectType() as an @InputType().
PickType, PartialType, and OmitType from @nestjs/mapped-types bridge output and input types safely.