当前位置: 首页 > 知识库问答 >
问题:

如何检查对象是否静态可迭代?

韦胜泫
2023-03-14

我有一个函数需要一个iterable:

function fn(ary) {
    for (let value of ary)
        console.log(value)
}

在javascript中,我将利用符号。迭代器

function isIterable(obj) {
    // checks for null and undefined
    if (obj == null) {
        return false;
    }
    return typeof obj[Symbol.iterator] === 'function';
}

取自Tomas Kulich的原始答案。

这将导致下一个代码:

function fn(ary) {
    if (!isIterable(ary)) throw 'Not iterable'

    for (let value of ary)
        console.log(value)
}

有没有一种方法可以利用TypeScript的打字功能而不是使用这个即时功能?

共有1个答案

宗政德宇
2023-03-14

有一种Iterable类型可以做到这一点:

function fn(ary: Iterable<any>) {
    for (let value of ary)
        console.log(value)
}

此处对应的打字脚本

请注意,Iterable需要on类型参数any允许您专门检测对象是否可迭代,尽管您可以进一步指定要迭代的对象(例如iterable)

 类似资料:
  • 在MDN文档中:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of 用于。。。of构造被描述为能够在“iterable”对象上迭代。但是有没有一个好的方法来决定一个对象是否是可移植的呢? 我试图找到数组、迭代器和生成器的公共属性,但无法做到这一点。 除了为。。。检查try块中的,

  • 问题内容: 我试图得到: 在我自己的脚本中,我以前只是使用它,因为我从来不需要作为属性: 因此,对于第二个对象,我想出了以下方法作为一种快速解决方案-大部分都能奏效。;) 问题是,这取决于浏览器是否强制执行只读属性,而并非所有人都这样做。 有没有好的替代品? 问题答案: 这可能很有趣: 它是DOM Level2的一部分。 更新2 :这是我在自己的库中实现它的方式:(以前的代码在Chrome中不起作

  • 问题内容: Simmilar问题(与Python2相关:Python:检查方法是否为静态) 让我们考虑以下类定义: 在Python 3中,一切都不再是功能了,因此与Python 2相关的答案将不再起作用。 正如我所说的,一切都是函数,因此我们可以调用,但是我们当然不能调用(参数不匹配)。但是,如果我们做一个实例,我们叫Python的传递给函数的作为第一个参数。调用阻止发送或捕获-,因此必须有一种方

  • 问题内容: 我有一个需要循环通过的嵌套JSON对象,每个键的值可以是String,JSON数组或另一个JSON对象。根据对象的类型,我需要执行不同的操作。有什么方法可以检查对象的类型以查看它是String,JSON对象还是JSON数组? 我尝试使用和,但似乎都没有用,因为这将为JSON对象和数组都返回一个对象,并且在我这样做时给出错误。 更具体地说,在将JSON解析为JS对象之后,有什么方法可以检

  • 问题内容: 我的服务器端代码返回一个值,该值成功时为json对象,失败时为字符串’false’。现在如何检查返回的值是否为json对象? 问题答案: 如果字符串是JSON,则jQuery.parseJSON()应该返回类型为“对象”的对象,因此您只需使用以下命令检查类型

  • 我有一个需要循环的嵌套JSON对象,每个键的值可以是字符串、JSON数组或其他JSON对象。根据对象的类型,我需要执行不同的操作。是否有任何方法可以检查对象的类型,以查看它是字符串、JSON对象还是JSON数组? 我尝试使用和,但两者似乎都不起作用,因为将为JSON对象和数组返回一个对象,并且当我执行时,会给出一个错误。 更具体地说,在将JSON解析为JS对象后,是否有任何方法可以检查它是普通字符