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

TypeScript泛型定义中带等号的extends约束有什么作用?

TypeScript 泛型默认参数作用解答

你看到的Data extends Base = Base实际是两个独立的泛型语法组合使用的写法:

  • 前半部分Data extends Base是泛型约束:规定任何传入Data位置的类型必须符合Base的类型结构,是Base的子类型,不符合约束的类型传入时TS会抛出类型错误。
  • 后半部分= Base是泛型默认类型参数:当你使用MyType时如果没有主动传入Data对应的具体类型,TS会自动将Base作为Data的默认类型使用。

这个写法的核心作用是让泛型参数变成可选项,不传参数时也能得到符合约束的默认类型,逻辑和JavaScript中函数的默认参数非常相似。

代码示例验证

// 先定义基础的Base类型
type Base = {
  id: number
}

// 你提供的类型定义
export type MyType<Data extends Base = Base> = { data: Data }

// 场景1:主动传入符合约束的自定义类型
type User = { id: number; name: string }
type UserMyType = MyType<User>
// 此时UserMyType的实际结构为:{ data: { id: number; name: string } }

// 场景2:不传入任何泛型参数,使用默认值
type DefaultMyType = MyType
// 此时DefaultMyType的实际结构为:{ data: { id: number } }

如果没有加= Base的默认值声明,你使用MyType时必须主动传入符合约束的类型参数,否则TS会抛出缺少泛型参数的错误。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 08:48:02