调用TypeScript泛型函数时如何强制要求显式传入类型参数
实现方案
你可以通过给泛型设置默认never类型结合条件类型约束的方式满足需求,修改后的函数定义如下:
function example<T = never>(...args: T extends never ? [never] : any[]): Partial<T> { // 函数原有实现逻辑保持不变 return {} as Partial<T> }
实现原理
- 给泛型
T设置默认值为never,当调用时没有显式传入类型参数时,T会自动使用默认值never - 函数参数通过条件类型判断:当
T为never时,参数被限定为[never]类型,而never类型不接受任何实际值传入,调用时会直接触发编译错误 - 当显式传入类型参数时,
T不再匹配never,参数类型会恢复为可传入任意值的any[](你可以根据实际业务需求替换此处的any[]为你需要的实际参数类型)
效果验证
const inputArgs = [] // 未显式传类型参数,触发编译错误:类型“undefined[]”的参数不能赋给类型“never”的参数 example(...inputArgs) interface User { name: string age: number } // 显式指定类型参数,无编译错误,返回值类型为 Partial<User> example<User>(...inputArgs)
内容的提问来源于stack exchange,提问作者samadadi
相关产品推荐
相关产品推荐

