Apollo InMemoryCache中possibleTypes对typePolicies子字段无效求助
问题分析与解决方案
首先明确:possibleTypes的作用是处理GraphQL接口/联合类型的类型识别——比如你定义了Fruit接口,Apple和Banana是它的实现类,possibleTypes会告诉Apollo这两个类型属于Fruit接口,方便缓存时正确解析类型。它和Query类型下字段的merge策略完全不相关,所以你用possibleTypes批量配置字段规则的思路从一开始就走不通。
批量配置字段策略的正确方式
大型项目里手动逐个写字段配置太繁琐,你可以用代码批量生成typePolicies的字段规则:
// 把需要配置的Query字段统一放到数组里(可从Schema配置文件自动导入,避免硬编码) const targetQueryFields = ['apple', 'banana']; const cache = new InMemoryCache({ typePolicies: { Query: { fields: targetQueryFields.reduce((fieldConfig, fieldName) => { fieldConfig[fieldName] = { merge: false }; return fieldConfig; }, {}), }, }, });
为什么直接配置子字段有效?
Query类型下的每个字段都是独立的缓存单元,Apollo不会自动将某个父级配置(哪怕你误以为queryName是父级)继承给子字段。你直接给apple、banana字段设置merge: false,是直接针对每个缓存单元配置规则,所以能生效。
如果你的字段有统一命名规则(比如都以fruit_开头),还可以通过遍历Schema的Query字段列表,自动筛选符合规则的字段生成配置,进一步减少维护成本。
内容的提问来源于stack exchange,提问作者leje512
相关产品推荐
相关产品推荐

