You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为TypeScript的zip函数编写支持任意参数的类型声明?

实现支持任意数量迭代器的zip方法类型声明

要实现支持任意数量参数的zip方法,同时让返回类型准确对应各迭代器的值类型元组,可以利用TypeScript的可变泛型元组和条件类型推断来实现。

具体实现步骤:

  • 为zip方法定义可变长度的泛型参数Bs,约束为包含任意数量Iterable或Iterator类型的数组;
  • 通过条件类型infer推断每个参数对应的迭代值类型;
  • 将当前迭代器的类型T与所有参数的迭代值类型合并为一个元组,作为返回值ItIterator的泛型参数。

类型声明代码:

class ItIterator<T> implements Iterator<T> {
  // 迭代器基础方法实现示例
  next(): IteratorResult<T> {
    return { done: false, value: {} as T };
  }

  zip<Bs extends (Iterable<any> | Iterator<any>)[]>(
    ...others: Bs
  ): ItIterator<[
    T, 
    ...{ [K in keyof Bs]: Bs[K] extends Iterable<infer X> | Iterator<infer X> ? X : never }
  ]> {
    // zip方法的具体合并逻辑(此处为占位实现)
    return {} as ItIterator<any>;
  }
}

验证效果:

当你调用:

ItIterator.prototype.zip.call([1][Symbol.iterator](), ['a'], [false])

TypeScript会自动推断出返回类型为ItIterator<[number, string, boolean]>,完全符合需求。

关键点说明:

  • Bs extends (Iterable<any> | Iterator<any>)[]:确保传入的所有参数都是可迭代对象或迭代器;
  • { [K in keyof Bs]: Bs[K] extends Iterable<infer X> | Iterator<infer X> ? X : never }:遍历参数数组,逐个推断每个迭代器/可迭代对象的值类型;
  • [T, ......]:将当前迭代器的值类型T放在元组首位,后面拼接所有参数的迭代值类型,形成最终的元组类型。

内容的提问来源于stack exchange,提问作者eri412

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 13:40:46