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

TypeScript中能否通过泛型修改类型?无需双函数实现类型匹配

解决方案

可以通过泛型默认值+条件类型实现单个函数的类型匹配需求,无需拆分两个函数。核心思路是利用条件类型根据泛型参数的不同返回对应类型,同时通过默认泛型参数处理未传入泛型的场景。

实现代码

function getResult<T extends never | HTMLElement = never>(): T extends never ? string : Array<T> {
  // 仅关注类型匹配,JavaScript实现可忽略(此处为占位)
  return null as any;
}

类型验证示例

  • 不传泛型参数时,返回类型为string:
    const str = getResult(); // 类型:string
    
  • 传入HTMLInputElement,返回类型为Array<HTMLInputElement>:
    const inputList = getResult<HTMLInputElement>(); // 类型:Array<HTMLInputElement>
    
  • 传入HTMLSelectElement,返回类型为Array<HTMLSelectElement>:
    const selectList = getResult<HTMLSelectElement>(); // 类型:Array<HTMLSelectElement>
    
  • 传入never,返回类型为string:
    const neverResult = getResult<never>(); // 类型:string
    

原理说明

  1. 泛型默认值:将T的默认值设为never,确保调用时未指定泛型时,T自动取never
  2. 条件类型:通过T extends never ? string : Array<T>进行分支判断,精准返回对应类型,避免出现始终返回联合类型的问题
  3. 泛型约束:T extends never | HTMLElement限制了泛型参数的合法范围,符合需求场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 08:54:54