如何在 TypeScript 4.0 中将命名元组转换为未命名元组?

Ped*_*o A 3 tuples typescript

从 TypeScript 4.0 开始,我们命名为 tuples,这很棒:

type Fn = (foo: number) => void;

type Foo = Parameters<Fn>;
// type Foo = [foo: number];
Run Code Online (Sandbox Code Playgroud)

然而,我面临着一种情况,我现在有一个命名元组,但名称很混乱。我不想要这些名字。

如何构建一个RemoveNames<T>可以接受[foo: number]并返回的实用程序类型[number]

注意:当然,我需要它来处理任何大小的元组。

jca*_*alz 5

这些元组名称往往非常粘,但如果您在元组中添加/附加未命名的元素,它们就会消失。因此,一种方法可以是预先添加然后删除某些类型,如下所示:

type RemoveNames<T extends any[]> = [any, ...T] extends [any, ...infer U] ? U : never
Run Code Online (Sandbox Code Playgroud)

这似乎按照你想要的方式行事:

type UnnamedFoo = RemoveNames<Foo>;
// type UnnamedFoo = [number]
Run Code Online (Sandbox Code Playgroud)

Playground 代码链接