如何在 Apollo 中解决远程 属性 的不同类型?
How to resolve a different type for a remote property in Apollo?
假设我有以下查询:
foo {
id
bar
baz @client
}
我可以(事实上,我必须)创建一个解析器来生成本地 baz
属性。所以我控制它的数据类型。
现在,如果我想更改远程 属性 的 bar
的数据类型怎么办?
我想将 bar
设为 BigNumber 而不是字符串。想象一下这样的事情:
resolvers: {
bar: {
return new BigNumber(bar);
},
baz: { ... }
}
这可能吗?
TLDR;在大多数情况下,您不能这样做,因此通过创建具有正确数据类型的本地 属性 来增加一点冗余。
基本查询
不起作用
query Foo {
id
bar
baz {
id
}
}
如果您添加这样的解析器:
export default {
Foo: {
bar: ({ bar }) => new BigNumber(bar),
}
}
它不会工作。
@client 的基本查询
有效
query Foo {
id
bar
baz {
id
}
qux @client
}
只需添加另一个 属性,比如 qux
,它具有 @client
指令,您将触发上面定义的 bar
解析器。
带片段的复杂查询
不起作用
如果您像这样重写查询:
fragment Baz on Foo {
id
}
query Foo {
id
bar
qux @client
...Baz
}
它将不再有效,即使使用@client 指令也是如此。
我的环境:
- apollo-cache-inmemory@^1.6.3
- apollo-client@^2.6.4
- 阿波罗-link-http@^1.5.16
- graphql@^14.5.8
- graphql-tag@^2.10.1
我正在连接到 thegraph.com 上托管的区块链子图。 YMMV.
假设我有以下查询:
foo {
id
bar
baz @client
}
我可以(事实上,我必须)创建一个解析器来生成本地 baz
属性。所以我控制它的数据类型。
现在,如果我想更改远程 属性 的 bar
的数据类型怎么办?
我想将 bar
设为 BigNumber 而不是字符串。想象一下这样的事情:
resolvers: {
bar: {
return new BigNumber(bar);
},
baz: { ... }
}
这可能吗?
TLDR;在大多数情况下,您不能这样做,因此通过创建具有正确数据类型的本地 属性 来增加一点冗余。
基本查询
不起作用
query Foo {
id
bar
baz {
id
}
}
如果您添加这样的解析器:
export default {
Foo: {
bar: ({ bar }) => new BigNumber(bar),
}
}
它不会工作。
@client 的基本查询
有效
query Foo {
id
bar
baz {
id
}
qux @client
}
只需添加另一个 属性,比如 qux
,它具有 @client
指令,您将触发上面定义的 bar
解析器。
带片段的复杂查询
不起作用
如果您像这样重写查询:
fragment Baz on Foo {
id
}
query Foo {
id
bar
qux @client
...Baz
}
它将不再有效,即使使用@client 指令也是如此。
我的环境:
- apollo-cache-inmemory@^1.6.3
- apollo-client@^2.6.4
- 阿波罗-link-http@^1.5.16
- graphql@^14.5.8
- graphql-tag@^2.10.1
我正在连接到 thegraph.com 上托管的区块链子图。 YMMV.