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

TypeScript如何为callNTimes的func参数实现收集args的类型约束?

解决方案

通过TypeScript泛型+Omit工具类型即可实现需求,核心逻辑是用泛型参数捕获全部入参类型,再从入参类型中排除n、func两个固定属性,将剩余属性类型与func的第二个参数做绑定:

完整实现代码

// 泛型T自动捕获所有入参的完整类型
function callNTimes<T extends { 
  n: number; 
  func: (index: number, args: Omit<T, 'n' | 'func'>) => void 
}>({ n, func, ...args }: T): void {
  for (let index = 0; index < n; index++) {
    func(index, args as Omit<T, 'n' | 'func'>);
  }
}

调用效果验证

callNTimes({
  n: 3,
  name: "bob",
  age: 18,
  func: (i, { name, age }) => {
    // TS可自动推导:name为string类型、age为number类型
    // 若访问不存在的属性会直接触发类型报错
    console.log(i, name, age);
  },
});

实现说明

  • 泛型T会在你调用函数时,自动推断出传入的所有参数的完整类型
  • Omit<T, 'n' | 'func'>用于从入参类型中排除两个固定属性n和func,返回的类型和你解构得到的...args运行时内容完全匹配
  • 将func的第二个参数声明为Omit<T, 'n' | 'func'>,即可实现类型的自动关联推导

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 18:36:05