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

问题描述

Since TypeScript 4.0,we have named tuples,很棒:

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

type Foo = Parameters<Fn>;
// type Foo = [foo: number];

但是,我现在面临的情况是我现在有一个已命名的元组,但名称却很混乱。我不要名字。

如何构建一个RemoveNames<T>并返回[foo: number]的{​​{1}}实用程序类型?

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

解决方法

这些元组的名称通常很粘,但是如果您在元组前面添加/未命名元素,它们确实会消失。因此,执行此操作的一种方法可能是添加前缀,然后删除某些类型,例如:

type RemoveNames<T extends any[]> = [any,...T] extends [any,...infer U] ? U : never

这似乎按照您想要的方式发挥作用:

type UnnamedFoo = RemoveNames<Foo>;
// type UnnamedFoo = [number]

希望有所帮助;祝你好运!

Playground link to code