功能请求: 配置标志,用于启用 ID 输入强制
作者: sjbarag创建于 2026年9月11日更新于 2026年9月11日
GraphQL 规范的第 3.5.5 节描述了 ID 类型,并包含以下子节点: > ### 输入强制转换 > 当预期为输入类型时,任何字符串(如 "4")或整数(如 4 或 -4)的输入值都应根据给定 GraphQL 服务所期望的 ID 格式进行强制转换为 ID。任何其他输入值,包括浮点输入值(如 4.0),都必须引发 _请求错误》,表明类型不正确。 源代码 简而言之:符合规范的服务 应 接受 String 或 Int 作为 ID 类型的输入,但这并不是必需的。不幸的是,Relay 没有办法知道服务是否支持这种强制转换,因此它被迫将 ID 输入限制为字符串。这主要是 Flow/TypeScript 类型声明和 LSP 中的问题,因为整数 ID 是不允许的。客户端随后被迫在运行时手动将 Number 输入 ID 转换为字符串,以满足该限制,尽管(通常更快)的服务支持该转换。 > 是否有兴趣允许 Relay 用户在服务器端声明对 ID 输入强制转换的支持?我想它可以通过 server_supports_id_input_coercion 标志(或类似)进行配置,并默认为“关闭”,以保持安全。对于那些在 Int 类型字段中返回 ID 的系统,这将是一个中等的用户体验提升。
内容来源: facebook/relay