Typescript 泛型扩展了类型解析
给定这个函数Typescript 泛型扩展了类型解析,typescript,type-resolution,Typescript,Type Resolution,给定这个函数 export function filterMap2<TVal,TRet,TIter extends Iterable<TVal>=TVal[]>(obj: TIter, callback: (v: TVal, k: number, i: TIter) => TRet|symbol): TRet[] { let accum = []; let i = 0; for(let x of obj) { let y =
export function filterMap2<TVal,TRet,TIter extends Iterable<TVal>=TVal[]>(obj: TIter, callback: (v: TVal, k: number, i: TIter) => TRet|symbol): TRet[] {
let accum = [];
let i = 0;
for(let x of obj) {
let y = callback(x, i++, obj);
if(y !== __skip__) {
accum.push(y as TRet);
}
}
return accum;
}
Typescript似乎无法解析x
的类型,即使number
显然是number[]
,这意味着IIter
是number[]
,这意味着TVal
必须是number
但是,如果我将签名更改为:
export function filterMap2<TVal,TRet>(obj: Iterable<TVal>, callback: (v: TVal, k: number, i: Iterable<TVal>) => TRet|symbol): TRet[] {
导出函数filterMap2(obj:Iterable,回调:(v:TVal,k:number,i:Iterable)=>TRet | symbol:TRet[]{
但是,这个签名并没有那么具体:我想表明I
与obj
的类型完全相同
这只是TypeScript的一个限制,还是我做错了什么
export function filterMap2<TVal,TRet>(obj: Iterable<TVal>, callback: (v: TVal, k: number, i: Iterable<TVal>) => TRet|symbol): TRet[] {