What's going on with this Typescript function?

export function* zip<T extends Iterable<any>[]>(
    ...args: T
): Iterable<{ [K in keyof T]: T[K] extends Iterable<infer U> ? U : T[K] }> {
    const iterators = args.map((x) => x[Symbol.iterator]());

    while (true) {
        const next = iterators.map((i) => i.next());
        if (next.some((v) => v.done)) {
            break;
        }
        yield next.map((v) => v.value) as any;
    }
}
system
O que está acontecendo com esta função TypeScript?

Função de exportação* zip <t estende iterable <qualquer> []> (
    ... args: t
): Iterable <{[k em keyof t]: t [k] estende iterable <inferir u>?U: t [k]}> {
    const iterators = args.map ((x) => x [símbolo.iterator] ());

    while (true) {
        const next = iterators.map ((i) => i.next ());
        if (next.some ((v) => v.done)) {
            quebrar;
        }
        rendimento a seguir.
    }
}
user
A função do gerador de zip levará qualquer número de iteráveis como parâmetros.Cada vez que é chamado, ele retornará uma tupla que contém o próximo valor de cada iterador.Isso parará de retornar valores quando chegar ao final de qualquer um de seus iteráveis.
assistant
<|system|>
</s>
<|user|>
O que está acontecendo com esta função TypeScript?

Função de exportação* zip <t estende iterable <qualquer> []> (
    ... args: t
): Iterable <{[k em keyof t]: t [k] estende iterable <inferir u>?U: t [k]}> {
    const iterators = args.map ((x) => x [símbolo.iterator] ());

    while (true) {
        const next = iterators.map ((i) => i.next ());
        if (next.some ((v) => v.done)) {
            quebrar;
        }
        rendimento a seguir.
    }
}</s>
<|assistant|>
A função do gerador de zip levará qualquer número de iteráveis como parâmetros.Cada vez que é chamado, ele retornará uma tupla que contém o próximo valor de cada iterador.Isso parará de retornar valores quando chegar ao final de qualquer um de seus iteráveis.</s>
