#6500·trpc

错误: Zod 品牌元组的序列化无效

作者: davazp创建于 2025年2月15日更新于 2026年8月31日
标签🐛 bug: unconfirmed

提供环境信息

系统 :
操作系统: macOS 15.3.1
CPU: (16) arm64 苹果 M3 最大
内存: 17.81 GB / 48.00 GB
壳体: 5.9 - /bin/zsh
二进制 :
节点:18.16.0 - ~.nvm/版本/节点/v18.16.0/bin/节点
雅恩:1.22.21 - ~.nvm/版本/节点/v18.16.0/bin/yarn
npm: 9.5.1-~.nvm/版本/node/v18.16.0/bin/npm
pnpm: 8.14.3 - ~/.nvm/版本/node/v18.16.0/bin/pnpm
浏览器 :
克罗姆: 133.0.6943.55
萨法里: 18.3
npm 软件包 :
@trpc/客户: 11.0.0-rc.741 QQ 11.0.0-rc.741+caed91ee7 (中文(简体) ).
@trpc/服务器: 11.0.0-rc.741 QQ 11.0.0-rc.741+caed91ee7 (中文(简体) ).
ZZ: 5.7.3 * 5.7.3

描述错误

trpc 客户端无法推断出 Zod 序列化 tuple 的输出类型 。

这样的程序

2zz
导出 Const 点=z
.tuple ([z. 数字 (), z. 数字 (), z. 数字 ()]
.brand( “点” );
导出类型 Point = z.infer <type of Point > ;

导出 const 应用程序 = t.router ({
获取点: t. procedure.query(同步 () {{
返回{
点: [1, 2, 3] 作为点,
* ;
~ , , ( ) ,
* ;
const results = 等待 trpc.getPoint.query (); / 有类型
4zz
{
点:序列化Tuple < [号码,号码,号码] & BRAND < "Point" QQ;
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?

此类型不能指定为点 :

键入“ 序列化 Tuple < [数, 数, 数] & BRAND < “ 点” > 不可指定为“ 数, 数, 数] & BRAND < 点” 。
类型“ 序列化 Tuple< [数, 数, 数] & BRAND < “ 点” {} 不可指定为“ 数, 数, 数] 。
财产的"长度"类型是不相容的.
类型“ 数字” 无法指定为类型“ 3 ”

工作间

我可以定义一个假的Transformer 让trpc保释,而不是试图改变类型。 然后,我得到了正确的类型 前端。

与复制的链接

https://GitHub.com/davazp/trpc-bug-brand-tuples (中文(简体) ).

###来再生.

https://GitHub.com/davazp/trpc-bug-brand-tuples (中文(简体) ).

补充资料

此处的 " 序列图 " 定义

zz
/** JSON 序列化[tuples](https://www.typescriptlang.org/docs/handbook/2/obobjects.html#tuple-types) */ 互联网档案馆的存檔,存档日期2011-12-21.
类型序列化 Tuple <T 扩展 [未知,... 未知[ ]] > = {
[K in keyof T]: T[K] 延伸非Json Primitive? 无效:序列化<T[K]>;
* ;

这里的索引将把它当作一个对象

6zz
T 类型 = 序列化 < [1, 2,3] & & QQBrand: 无效 ;
7zz
类型 T = {
[x:号码]:1| 3| 2;
○:一;
1:2;
2:3;
长度: 1 | 3 | 2;
tostring: 无效;
改为本地结构: 无效;
弹出:无效;
推:无;
集合:无效;
加入:无效;
倒数:无效;
平移:无;
切片: 无;
类型:无效;
螺旋:无;
还有23个
品牌: 1个,多1个,2个;
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?

需要一些打字机。 然而,我想这影响到其他类型的品牌类型和其他情况。

如果Trpc只是检查输出类型是否兼容JSON,则会更简单,否则会给出出错,但返回原始类型 . . . . . . .