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
相关产品推荐
相关产品推荐

