Typescript无法从函数参数推断泛型类型参数

vq8itlhq  于 2023-04-07  发布在  TypeScript
关注(0)|答案(1)|浏览(164)

下面是一个例子:

type Collection<T = any> = T[]

type CollectionGetter = () => Collection

function collectionProcessor(getter: CollectionGetter) {
  const res = getter();
  // some processing...
  // return collection of the same type
  return res;
}

// ---

interface Item {
  id: number;
}

const myGetter = () => {
  return [
    {
      id: 1
    },
    {
      id: 2
    },
    {
      id: 3
    }
  ] as Collection<Item>
}

const result = collectionProcessor(myGetter);
// typeof result = Collection<any>
// expected: Collection<Item>
console.log(result);

TSPlayground
Typescript无法从传递给collectionProcessor的参数推断Collection<T>类型参数。
什么是正确的方式来输入这个例子?
我知道我可以像这样输入处理器function collectionProcessor<R>(getter: CollectionGetter): Collection<R>并显式传递类型collectionProcessor<Item>(myGetter),但这并不方便,因为参数是从更高的抽象级别传递下来的。

2w3kk1z5

2w3kk1z51#

您缺少一些泛型来完成链。

type CollectionGetter<T> = () => Collection<T>

在这里省略<T>,你只推断出any
Playground

相关问题