如何从TypeScript数组类型中移除指定索引元素?以Parameters类型为例
从数组类型中移除首个元素实现柯里化
你可以通过TypeScript的条件类型+类型推断来实现从Parameters数组类型中移除索引0的元素,具体可定义一个Tail工具类型提取数组中除首个元素外的剩余部分。
解决方案代码
function NEW_PERSON(name: string, age: number, weight: number, height: number) { // 函数逻辑 } // 工具类型:移除数组类型的首个元素 type Tail<T extends any[]> = T extends [infer _, ...infer Rest] ? Rest : never; function CURRIED_NEW_PERSON(name: string) { // 使用Tail获取NEW_PERSON参数中除第一个name外的剩余类型 return function (...args: Tail<Parameters<typeof NEW_PERSON>>) { return NEW_PERSON(name, ...args); // 参数数量匹配,无类型错误 }; }
逻辑说明
Tail<T>通过条件类型推断,将输入数组T拆分为首个元素(用infer _捕获,下划线表示无需使用该值)和剩余元素数组Rest,最终返回Rest类型。Parameters<typeof NEW_PERSON>会提取NEW_PERSON的参数类型数组[string, number, number, number],经过Tail处理后得到[number, number, number],正好匹配柯里化后需要传入的age、weight、height参数类型。
调用验证
这样调用柯里化后的函数,类型检查完全正常:
const createPerson = CURRIED_NEW_PERSON("Alice"); createPerson(25, 60, 170); // 类型正确,无报错
内容的提问来源于stack exchange,提问作者A. L
相关产品推荐
相关产品推荐

