我有一个 GraphQL (GQL) 服务器,并且在前端使用 TypeScript (TS)。这是我的 GQL 类型。
type AutomatedAlgorithmValue {
politicalEntityAlgorithmValueId: Long
politicalEntityId: Long!
...
}
politicalEntityId
是不可为空的。如果我要求,这给了我行为politicalEntityId
,那么它保证在那里,但如果我不要求它,那么查询将正常运行。
我使用graphql-codegenerator从 GQL 模式中创建 TS 类型。TS 类型使politicalEntityId
as 非空,所以现在在前端我必须始终请求politicalEntityId
as 类型的一部分,AutomatedAlgorithmValue
即使它不是我想要请求的东西。
在我的前端代码中,我将数据保存在一个钩子中
let [results, setResults] = useState<AutomatedAlgorithmValue[]>([]);
这是我的 GQL 请求
executeAutomatedAlgorithmProcess(politicalEntityId: $id, type: $type) {
values {
politicalEntityAlgorithmValueId
}
}
此时我不需要politicalEntityId
,但是当我尝试将数据添加到我results
的 时,TS 编译器知道我正在null
为non-null
属性添加politicalEntityId
并引发错误。
non-null
如果存在具有其他属性的对象,情况会变得更糟,因为现在请求会随着每个不必要的属性/对象non-null
而变得越来越大。non-null
其他人是如何处理这个问题的?我每次都必须创建一个新类型吗?我是否使用Pick
来确定数据将在results
hook
? 是否有一个插件可以使所有内容都可以为空,如果有,我应该使用它吗?