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[] {