typescript 类型脚本元组:第一项是函数,参数是元组的其余部分

omqzjyyz  于 2022-11-26  发布在  TypeScript
关注(0)|答案(2)|浏览(88)
type Tuple = [];

const tup: Tuple = [
  ((a, b) = {
    //  a: number; tup 2th item
    //  b: boolean; tup 3th item
  }),
  1,
  false,
  // more item enble.
];

第一项是函数,其余参数类型均为tulpe。
我尝试定义Tuple,但是代码错误“类型别名'Tuple'循环引用自身“。

type Tuple = [(...args: any) => void, ...Parameters<Tuple[0]>];
5ssjco0h

5ssjco0h1#

通常不可能编写其中一部分与另一部分相关的类型(除了预定义的联合和指定显式泛型类型)。您需要创建一个能够推断参数类型的泛型函数。

const createTuple = <T extends any[]>(arg: [(...args: T) => void, ...T]) => arg

函数后面的元组中的元素将被推断为T。然后我们可以使用T来输入函数的参数。

const tuple = createTuple([
  (a, b) => {
    a
//  ^? a: number

    b
//  ^? b: boolean
  },
  1,
  false,
])

Playground

vawmfj5a

vawmfj5a2#

请分别定义它们。

type MyFunction = (a: number, b: boolean) => void;
type MyTuple = [MyFunction, ...Parameters<MyFunction>];

相关问题