如何在TypeScript中迭代集合?

如何在TypeScript中迭代集合?,typescript,Typescript,如何在TypeScript中迭代一个集合?因为..of不起作用: 'Set<string>' is not an array type or a string type “Set”不是数组类型或字符串类型 .forEach不可接受,因为它隐藏了此。我不喜欢在try-catch块中执行while循环。我错过了什么?它不可能如此笨拙,以至于需要try{while}catch{}。您仍然可以使用.forEach和正确的这个,方法是使用常规函数而不是箭头函数 mySet.forEach(

如何在TypeScript中迭代一个集合?因为..of不起作用:

'Set<string>' is not an array type or a string type
“Set”不是数组类型或字符串类型

.forEach
不可接受,因为它隐藏了
。我不喜欢在try-catch块中执行while循环。我错过了什么?它不可能如此笨拙,以至于需要try{while}catch{}。

您仍然可以使用
.forEach
和正确的
这个
,方法是使用常规函数而不是箭头函数

mySet.forEach(function(item){
    expect(this).toEqual(item);
});
相比

class MyClass{
    ...
    doSomething():{
        mySet.forEach((item) => {
            expect(this instanceof MyClass).toEqual(true);
        });
    }
}
另一种迭代方法是在值上使用for循环

for(item of mySet.values()){
    ...
}

有关使用foreach迭代
Set
的更多信息,请参见

@SnareChops基本正确:

mySet.forEach(function(item){
    // do something with "this"
}, **this**);
这很有效

我猜:

for(item of mySet.values()){
}
如果我没有处理那些把我的一切都搞砸了的东西,我会工作的。但垫片材料由Angular 2 crew规定,因此_(ツ)_/“”

唯一有效的其他方法是:

for (var item of Array.from(set.values())) {
}
或者类似的事情,这太可怕了。

这对我很有用:

this.mySet.forEach((value: string, key: string) => {
  console.log(key);
  console.log(value);
});

我在这里找到了它:

扩展了最高级的答案,如果我们对迭代变量使用
let
,它也是类型安全的,因此:

for (let elem of setOfElems) {
   ... do anything with elem...
}

这将保证
elem
将具有X类型,如果
setOfElems
被声明为
Set
,如果您在编译器选项中添加
“es6”
作为
“lib”
,并将
“es6”
作为目标,则可以在TypeScript中使用
for…of
,也可以使用
“es2015.iterable”
取代库中的
“es6”
,如果这更适合您的需要

例如(这将是您的tsconfig.json):


GitHub上的相关问题:

我很感谢您的快速响应,但我发现以下情况是正确的:方法1:“这个”没有保留,我想通常情况下,lambda是保留“这个”方法的方法2:这个方法不适合我。除了“while”之外,我发现唯一有效的方法是方法是:for(varkey of Array.from(this.keys.values())),这远远不可取,因为我认为它创建了一个新的数组,而且Array.from并不是在所有地方都得到完全支持。下面的内容是真的吗?也许你的意思是
Array.from()
{
    "compilerOptions": {
        "target": "es6",
        "lib": [
            "es6",
            "dom"
        ]
    },
    "exclude": [
        "node_modules"
    ]
}