这是我的问题。
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>
两者之间有什么区别?感谢您阅读我的问题。
[是的,是的,我看到默认推断的作用不足以将Iterable<Iterable<T>>
展开为T
。如果您查看Iterable
的键入方式是defined in the relevant library,这并不奇怪。interface Iterable<T> {
[Symbol.iterator](): Iterator<T>;
}