如何检查对象是否可静态迭代?
How can I check whether an object is iterable statically?
我有一个需要迭代的函数:
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 的输入功能而不是使用这个即时功能?
有一个 Iterable
类型可以做到这一点:
function fn(ary: Iterable<any>) {
for (let value of ary)
console.log(value)
}
Corresponding TypeScript playground here.
请注意 Iterable
需要类型参数。 any
允许您专门检测 just 如果一个对象是可迭代的,尽管您可以更进一步并指定您想要迭代的内容(例如 Iterable<Number>
) .
我有一个需要迭代的函数:
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 的输入功能而不是使用这个即时功能?
有一个 Iterable
类型可以做到这一点:
function fn(ary: Iterable<any>) {
for (let value of ary)
console.log(value)
}
Corresponding TypeScript playground here.
请注意 Iterable
需要类型参数。 any
允许您专门检测 just 如果一个对象是可迭代的,尽管您可以更进一步并指定您想要迭代的内容(例如 Iterable<Number>
) .