使用递归和yield关键字提取嵌套列表的Typescript函数

par*_*ent 4 javascript recursion yield-return typescript

我正在尝试重写一个 C# 函数,该函数使用yield递归将类的实例从嵌套列表中提取到单个列表中。

这是 C# 函数:

 public static IEnumerable<TargetObject> GetRecursively(params TargetObject[] startingObjects)
 {
    foreach (TargetObject startingObject in startingObjects)
    {
        yield return startingObject;
        if (startingObject.InnerObjects != null)
            foreach (TargetObject innerObject in startingObject.InnerObjects.ToArray())
                foreach (TargetObject recursiveInner in GetRecursively(innerObject))
                    yield return recursiveInner;
     }
 }
Run Code Online (Sandbox Code Playgroud)

由于 javascript 不能可靠地支持yield跨浏览器,我如何在这个复杂的函数中模拟它?

function getRecursively(...startingObjects: TargetObject[])
{
    return function () {
           ??
    }
}
Run Code Online (Sandbox Code Playgroud)

Jas*_*onS 8

2019 年更新

现在使用 typescript(或 es6)变得非常简单

function* recursiveIterator( obj: { children?: any[]; } ):IterableIterator<any> {
    yield obj;
    for ( const child of obj.children ) {
        yield* recursiveIterator( child );
    }
}
Run Code Online (Sandbox Code Playgroud)