数组与其余元组泛型

时间:2019-10-31 14:22:40

标签: typescript generics tuples

我正在尝试构建一个可以接受简化的函数数组的函数。它做很多其他事情,但从本质上讲,它是一个管道。我想使用泛型来推断函数的输出。出于某种原因,除非我将数组作为rest参数,否则它将无法正常工作。

极端简化的示例:

const pipe = <A, B, C, D>(items: [
  (a: A) => B,
  (b: B) => C,
  (c: C) => D
]): D => {
  return items.reduce((acc, fn) => fn(acc), {} as A & B & C) as D;
};

如果我这样称呼:

const result = pipe([
  (a: {}) => ({
    ...a,
    age: 4,
  }),
  (b) => ({
    ...b,
    color: 'blue',
  }),
  (c) => ({
    ...c,
    height: 100,
  }),
]);

我得到的类型为{ height: number }

似乎只是失去了思路。尽管参数b的类型为{ age: number },但是参数c的类型为{}

如果我做完全相同的事情,但带有rest参数:

const pipe = <A, B, C, D>(...items: [
  (a: A) => B,
  (b: B) => C,
  (c: C) => D
]): D => {
  return items.reduce((acc, fn) => fn(acc), {} as A & B & C) as D;
};

我得到的类型为{ age: number, color: string, height: number }

有人能对此有所启发吗?

0 个答案:

没有答案