GraphQL:是不是有相当于 TypeScript 的“未知”?
Posted
技术标签:
【中文标题】GraphQL:是不是有相当于 TypeScript 的“未知”?【英文标题】:GraphQL: is there an equivalent of TypeScript's "unknown"?GraphQL:是否有相当于 TypeScript 的“未知”? 【发布时间】:2021-05-27 01:16:17 【问题描述】:在 GraphQL 中,我有几个支持分页的查询。查询采用cursor
参数,并返回nextCursor
参数。
cursor/nextCursor
的类型对消费者来说并不重要。它可能是Number
或String
,甚至可能是一个对象——它只是一个客户不应该关心的实现细节。不同的查询甚至可能使用不同的游标类型。
有没有办法在 GraphQL 中对此进行建模?
在 TypeScript 中,有一个 unknown
类型,它基本上说“我不知道这是什么类型,但没关系,我不需要知道”。
【问题讨论】:
spec.graphql.org/June2018/#sec-Types ... 什么值得验证? ...使用工会? 【参考方案1】:我想我找到了我要找的东西:自定义标量:https://www.apollographql.com/docs/apollo-server/schema/custom-scalars/
例子:
scalar Cursor
type Query
getStrings(count: Int, cursor: Cursor): Result!
type Result
strings: [String]!
nextCursor: Cursor
自定义标量类型可以是任何东西——消费者不需要知道。服务器决定如何处理该值(序列化、反序列化等)。
【讨论】:
类似ID? ...并且[您声称] FE TS 开发人员(消费者)应该使用cursor: any
...嗯,这个著名的 TS 类型安全/不易出错的编码在哪里? ...我不认为它是'只是一个客户不应该关心的实现细节'
...当然,您可以在开发[通用]库期间使用标量...但是对于特定的“实例”,它应该发布假定类型(接受为/验证为)这个标量(int 或 string)使 FE 开发人员能够进行类型安全编码
客户不应该关心价值。他们只是从第一个查询中接收光标,并将其传递给下一个查询。
部分正确...但是 所有 graphql API 参数都应该输入 ...告诉这个 TSLint 与 "no-any": true, "no-unsafe -any": true 配置用户以上是关于GraphQL:是不是有相当于 TypeScript 的“未知”?的主要内容,如果未能解决你的问题,请参考以下文章
在 GraphQL 中是不是可以在对象类型级别上使用解析器?
GraphQL Federation:是不是有 Java Springboot 网关