【发布时间】:2020-03-05 03:07:38
【问题描述】:
我使用 yield 实现了一个简单的搜索 - 通过递归文件夹结构运行,产生所有文件夹。我的实现相当简单,我已经删除了所有“const”(以防万一)
function *folders(f: Folder) : IterableIterator<Folder> {
yield f;
if (f.folders)
{
for (let sf of f.folders) {
yield* folders(sf);
}
}
}
function *allFolders() : IterableIterator<Folder> {
for (let p of projects) {
yield* folders(p.project.rootFolder!)
}
}
当我尝试修改返回的对象时
let folders = allFolders();
let t = folders.next().value;
t.name = "sdvs";
我明白了
TypeError: Cannot assign to read only property 'name' of object '#<Object>'
如果我直接访问该对象(它位于此文件中的全局范围内),那很好。我现在已经花了几个小时在这上面,我完全感到困惑。这根本不可能吗?为什么会发生这种情况?
【问题讨论】:
-
请告诉我们您如何定义
projects,以及Folder类型是如何声明的。
标签: javascript typescript iterator yield