从推断参数元组中删除项目

Mis*_*pic 7 typescript

如果我有:

const selector = (state: {}, count = 1) => {};
type parms = Parameters<typeof selector>;
Run Code Online (Sandbox Code Playgroud)

然后parms将是:

[{}, number?]
Run Code Online (Sandbox Code Playgroud)

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

type parms = Parameters<typeof selector>[1]; // type parms = number
Run Code Online (Sandbox Code Playgroud)

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

jca*_*alz 10

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

type Tail<T extends any[]> = T extends [infer A, ...infer R] ? R : never;
Run Code Online (Sandbox Code Playgroud)

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

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

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

type Test = Tail<[1,2,3,4,5]>; // [2,3,4,5]
type Parms = Tail<Parameters<typeof selector>>; // [number?]
Run Code Online (Sandbox Code Playgroud)

Playground 链接到代码