Iterable >无法确认函数中的泛型T

问题描述 投票:0回答:1

这是我的问题。

const iterable = [[[1,2,3]]]
function flat<T>(t:Iterable<Iterable<T>>):Iterable<T>{
    return [...t][0]
}
const flatted = flat(iterable) //return Iterable<unknown>  

上面的函数不能将T假定为数字,只需断言它为未知数即可。在此备忘录中,我强调“嗯……不能推论泛型?”。但是下面的代码卡盘效果很好

const iterable = [[[1,2,3]]]
function flat<T>(t:Array<Array<T>>):Array<T>{
    return [...t][0]
}
const flatted = flat(iterable) // omg.. return Array<number> 

also

const iterable = [[[1,2,3]]]
function flat<T>(t:Iterable<Array<T>>):Array<T>{
    return [...t][0]
}
const flatted = flat(iterable) // also works.. return Array<number> 

两者之间有什么区别?感谢您阅读我的问题。

typescript generics type-inference
1个回答
2
投票

[是的,是的,我看到默认推断的作用不足以将Iterable<Iterable<T>>展开为T。如果您查看Iterable的键入方式是defined in the relevant library,这并不奇怪。interface Iterable<T> { [Symbol.iterator](): Iterator<T>; }

© www.soinside.com 2019 - 2024. All rights reserved.