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
相关产品推荐
相关产品推荐

