TypeScript中不手动传入泛型如何保留函数入参的原始类型
TypeScript 泛型函数类型推导优化方案
你不需要手动传入每个参数的typeof作为泛型实参,TypeScript 原生支持泛型参数的自动推导,可以根据传入的实参自动匹配泛型类型,完全不会产生冗余代码。
单参数场景实现
const hello = 'hello' // hello 为字面量类型 'hello' // 泛型函数定义无需修改 const fnWithGeneric = <T>(x: T) => x // 调用时省略泛型参数,TS 会自动推导 T 的类型为 'hello' const result = fnWithGeneric(hello) // 此时 result 类型会被正确识别为 'hello'
多参数场景实现
你担心的多参数冗余问题也可以通过自动推导完美解决,不需要手动传入任何泛型参数:
// 多泛型参数的函数定义 const multiFn = <T, U, V>(a: T, b: U, c: V) => { return { a, b, c } } // 调用时直接传参即可,所有泛型类型都会自动推导 const result = multiFn('hello', 2024, false) // result 类型自动识别为:{ a: 'hello', b: number, c: boolean }
补充说明
只有当入参无法推导出预期的泛型类型、或者需要强制收窄类型范围时,才需要手动传入泛型实参,日常开发场景下依赖自动推导即可,不会产生冗余代码。
内容的提问来源于stack exchange,提问作者Jonathan Verrecchia
相关产品推荐
相关产品推荐

