所以这更多的是一个设计问题。
我有一个名为Meaning
的对象(基本上是一个字典记录),还有一个名为EntryMeaningInput
的输入对象(我这样称呼它是因为Entry
[基本上是中心词]是一个不同的实体,但它并不重要)。
问题在于:对于creatinga Meaning
,我希望用户只能输入某些字段,而不能输入其他字段(部分对象),然后在某个时候填充它们(使用空字符串);但对于更新,我不想要
在updateMeaning
中(在解析器中),我可以尝试写入:
@Arg("options", () => EntryMeaningInput) options: Partial<EntryMeaningInput>
但是GraphQL不理解Partial<T>
。
现在,我的输入对象看起来像这样(看起来像GraphQL从TS中拾取它们):
@InputType()
export class EntryMeaningInput {
@Field(() => String)
headword: string = "";
@Field(() => String)
definition: string = "";
@Field(() => String)
usage: string = "";
@Field(() => String)
imageLink: string = "";
@Field(() => String)
notes: string = "";
}
一种解决方案是创建两个输入类型,一个用于创建,一个用于更新,但这似乎有点多余。
我还知道Nest.js(我没有在这个应用程序中使用)有the PartialType
util:
@InputType()
export class UpdateUserInput extends PartialType(CreateUserInput) {}
什么是最好的(最优雅的?)方式去做这件事?
1条答案
按热度按时间pobjuy321#
一种流行的方法是将某些属性标记为可空:
它消除了为创建和更新突变创建单独类型的需要。
缺点是API不够明确,这可能导致API用户在需要时不包含缺失值。这可以通过解析器或服务中输入对象的JavaScript验证来缓解。