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

关于TypeScript接口泛型extends联合类型及默认值的困惑

解析TypeScript泛型接口定义

先把你贴的代码拆成两个核心部分逐一拆解:

interface Foo<T extends string | string[] = string | string[]> { }

1. 泛型约束:T extends string | string[]

这里的string | string[]是联合类型,不是三个独立类型——|是TypeScript的联合类型运算符,用来表示「二选一」的类型范围:

  • 可选类型一:单个字符串类型string
  • 可选类型二:字符串数组类型string[]
    extends在这里的作用是限定:你给Foo指定的泛型T,必须是这两种类型中的任意一种(或是它们的子类型)。完全不存在「把数组赋值给string」的操作,只是划定了泛型的可选范围。

2. 泛型默认值:= string | string[]

这部分是给泛型T设置默认类型,意思是当你直接使用Foo而不指定具体泛型时(比如const foo: Foo = {}),T会自动被设为string | string[]这个联合类型。举几个实际使用的例子:

// 未指定泛型,T自动为string | string[]
const foo1: Foo = {};
// 明确指定T为string,符合约束
const foo2: Foo<string> = {};
// 明确指定T为string[],符合约束
const foo3: Foo<string[]> = {};
// 下面这种会报错,因为number不在约束范围内
// const foo4: Foo<number> = {};

你之前误解成「三个类型」,应该是把string | string[]错误拆分了——|是语法运算符,不是独立类型,它只是把前后两个类型合并成一个可选集合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 14:55:23