我有一个需要迭代的函数:
function fn(ary) {
for (let value of ary)
console.log(value)
}
在javascript中,我会利用Symbol.iterator
:
function isIterable(obj) { // checks for null and undefined if (obj == null) { return false; } return typeof obj[Symbol.iterator] === 'function'; }
来自Tomas Kulich original answer。
这将导致下一个代码:
function fn(ary) {
if (!isIterable(ary)) throw 'Not iterable'
for (let value of ary)
console.log(value)
}
难道没有办法利用TypeScript的键入工具而不是使用此即时函数吗?
答案 0 :(得分:2)
有一种Iterable
类型可以做到这一点:
function fn(ary: Iterable<any>) {
for (let value of ary)
console.log(value)
}
Corresponding TypeScript playground here。
请注意,Iterable
需要on类型参数。 any
允许您专门检测 just 是否可迭代对象,尽管您可以进一步指定要迭代的对象(例如Iterable<Number>
)。>