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

如何基于泛型参数限制TypeScript接口类型?

TypeScript 接口条件类型实现方案

需求场景

原接口定义如下:

interface Foo<T> {
  data: T[] | SomeWrapper<T>
}

需要修改该接口,使得仅当泛型T为string类型时,data字段允许是数组类型;当T为其他类型时,data只能是SomeWrapper<T>类型。

实现方案

可以利用TypeScript的条件类型结合never类型来实现这个限制,具体代码如下:

写法一

interface Foo<T> {
  data: T extends string ? T[] | SomeWrapper<T> : SomeWrapper<T>
}

写法二(更直观的类型排除)

interface Foo<T> {
  data: (T extends string ? T[] : never) | SomeWrapper<T>
}

原理说明

  • 当T等于string时,条件类型分支返回string[] | SomeWrapper<string>,满足数组和包装类型都允许的需求;
  • 当T为其他类型(如number、boolean等)时,条件类型分支会返回never,而never类型会被TypeScript自动忽略,最终data字段仅保留SomeWrapper<T>类型,达到了非string类型禁用数组的效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 16:39:50