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

如何限制TypeScript泛型函数的类型参数T仅为指定的两种类型?

TypeScript 限定泛型参数为指定类型的实现方案

核心实现方式是给泛型参数添加extends约束,将T的取值范围限定为boolean和{ b: string }的联合类型即可:

const fn = <T extends boolean | { b: string }>(props: T) => {
  // 此处可正常复用泛型T的逻辑
  // 可通过类型收窄区分两类入参做不同处理
  if (typeof props === 'boolean') {
    // TS自动推断当前props为boolean类型
    console.log(props ? '布尔真值' : '布尔假值')
  } else {
    // TS自动推断当前props为{ b: string }类型
    console.log('对象的b属性值:', props.b)
  }
}

效果验证

  • 合法入参无报错:
    fn(true)
    fn(false)
    fn({ b: '测试字符串' })
    
  • 非法入参触发类型校验错误:
    // 以下调用都会抛出TS类型错误
    fn(123)
    fn({ b: 456 })
    fn({ a: '额外属性' })
    

如果你在.tsx文件中编写该箭头函数,泛型语法会和JSX标签语法产生歧义,只要在泛型参数末尾加一个逗号即可解决:

const fn = <T extends boolean | { b: string },>(props: T) => {
  // 函数逻辑和之前完全一致
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:54:06