下面是一个例子:
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)
,但这并不方便,因为参数是从更高的抽象级别传递下来的。
1条答案
按热度按时间2w3kk1z51#
您缺少一些泛型来完成链。
在这里省略
<T>
,你只推断出any
。Playground