首页 > 解决方案 > 从推断参数元组中删除项目

问题描述

如果我有:

const selector = (state: {}, count = 1) => {};
type parms = Parameters<typeof selector>;

那么parms将是:

[{}, number?]

我注意到如果我应用一个索引,我可以提取一个参数:

type parms = Parameters<typeof selector>[1]; // type parms = number

有什么方法可以表明我想省略返回的第一个参数?类似的东西.slice(1)

标签: typescript

解决方案


对于“从元组中删除第一个元素”的特定情况,您可以使用 TypeScript 4.0 中引入的可变元组类型:

type Tail<T extends any[]> = T extends [infer A, ...infer R] ? R : never;

在 4.0 之前,您可以使用通用休息参数来做到这一点:

type Tail<T extends any[]> = 
  ((...x: T) => void) extends ((h: infer A, ...t: infer R) => void) ? R : never;

无论哪种方式都可以为您提供所需的行为:

type Test = Tail<[1,2,3,4,5]>; // [2,3,4,5]
type Parms = Tail<Parameters<typeof selector>>; // [number?]

Playground 代码链接


推荐阅读