Javascript 如何在TypeScript中引用回调返回值的类型

Javascript 如何在TypeScript中引用回调返回值的类型,javascript,typescript,vue.js,Javascript,Typescript,Vue.js,我有一个这样的泛型函数 function computedLastOf<T>(cb: () => T[]) : Readonly<Ref<T | undefined>> { return computed(() => { const collection = cb(); return collection[collection.length - 1]; }); } 函数computedLastOf(cb:()=>T[]):

我有一个这样的泛型函数

function computedLastOf<T>(cb: () => T[]) : Readonly<Ref<T | undefined>> {
  return computed(() => {
    const collection = cb();
    return collection[collection.length - 1];
  });
}
函数computedLastOf(cb:()=>T[]):只读{
返回计算(()=>{
const collection=cb();
返回集合[collection.length-1];
});
}
它是一种宏,为类型为T的集合返回计算(反应)值

但是请注意第一个
。它要求此函数的用户指定类型。如果它不是必需的,如果它是推断出来的,那就好了。此处返回的值将始终是回调返回的集合的子级

有没有一种方法可以让打字推断成这样


谢谢

调用泛型函数时,通常可以省略类型参数,从而推断出它。这种方法有时会失败,但最常见的情况是在更复杂的场景中,推断者没有注意到某些细节,并且推断的类型太宽(有效,但不是预期的)


尝试将其称为
computedLastOf(arg)
而不是使用
computedLastOf(arg)

Afaik显式为其指定泛型参数调用泛型函数时,如果忽略它,泛型参数通常已经被推断出来了?换句话说,写
computedLastOf(()=>[1,2,3])
应该可以。好的提示,谢谢!它返回的是
readonly很可能是
computed
的问题,是的。有时,推断者无法处理事情,需要显式类型注释,然而,这通常是少数情况。嗯,正在试验。即使我将函数转换为`function lastOf(cb){const collection=cb();return collection[collection.length-1];`结果是
any
,因为现在
cb
隐式地
any
(激活“noImplicitAny”帮助)。此外,泛型参数也完全消失了。请尝试一下
function computedLastOf(cb:()=>T[]){const collection=cb();返回集合[collection.length-1];}