You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript中curried函数的参数顺序校验及类型推断失效排查

TypeScript 泛型元组顺序校验失效问题解决

问题根因

你定义的Storm类型没有捕获传入参数的具体元组类型,导致类型校验失效:

  • 原定义type Storm = (...pipes: ValidOrder<Pipe<keyof Nats>[]>) => any中,参数被声明为统一的Pipe<keyof Nats>[]数组类型
  • TypeScript 会自动将传入的Pipe<0>、Pipe<4>等具体类型向上宽化为Pipe<keyof Nats>,丢失了每个Pipe携带的数字标记信息
  • 此时PipeOrder提取到的所有元素都是keyof Nats联合类型,IsOrdered无法判断顺序,所有输入都会被判定为合法

修复方案

将Storm修改为泛型函数,让TypeScript自动捕获传入参数的具体元组类型,再执行顺序校验:
把原有Storm类型定义:

type Storm = (...pipes: ValidOrder<Pipe<keyof Nats>[]>) => any

替换为:

type Storm = <P extends Pipe<keyof Nats>[]>(...pipes: ValidOrder<P>) => any

修改后,测试用例const w = storm(o, f)会抛出预期的类型错误,const r = storm(f, o)可以正常通过校验。

内容的提问来源于stack exchange,提问作者Andreas Herd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 15:39:00