新闻详情

新闻详情

首页 / 资讯中心 / 详情

TypeScript 类型扩展完全指南:interface extends、多重继承与交叉类型实战(typescript-book)

发布时间:2026/9/25 14:46:45来源:尧图网络
TypeScript 类型扩展完全指南:interface extends、多重继承与交叉类型实战(typescript-book)
文档教程【免费下载链接】typescript-bookThe Concise TypeScript Book: A Concise Guide to Effective Development in TypeScript. Free and Open Source.项目地址https://gitcode.com/gh_mirrors/typ/typescript-book点击查看免费下载本指南以《The Concise TypeScript Book》开源仓库中西班牙语文档 extending-types.md对应英文原版见 website/src/content/docs/book/extending-types.md为核心系统讲解 TypeScript 中扩展类型的四种核心手段interface的extends单继承与多继承、type的交叉类型、接口对类型别名的单向扩展以及泛型约束中的extends。读完本文你将能根据场景准确选择extends与写出可组合、可复用且类型安全的对象类型设计。一、接口的 extends从单一类型复制成员在原文档中interface的extends是最基础的类型扩展方式它允许新接口复制另一个类型的全部成员再追加自己的成员。原始示例interface X { a: string; } interface Y extends X { b: string; }这里Y拥有a继承自X与b自身声明两个属性等价于声明了{ a: string; b: string }的结构。下面是一个更接近实际业务的完整用例interface BasicUser { id: number; name: string; } interface AdminUser extends BasicUser { permissions: string[]; role: admin; } const admin: AdminUser { id: 1, name: Simon, permissions: [read, write, delete], role: admin, };要点extends是类型层面的继承编译后不产生任何运行时开销纯粹用于静态类型检查派生接口如AdminUser必须是超类型——即必须至少包含父接口的全部成员否则会报缺少属性的错误扩展可以逐层进行A extends BC extends A形成清晰的类型继承链。二、多重扩展同时继承多个接口原文档指出interface也可以从多个类型扩展interface A { a: string; } interface B { b: string; } interface Y extends A, B { y: string; }此时Y将A、B的所有成员与自身成员合并要求实现方同时满足三者的结构。这弥补了 TypeScript 类只能单继承的限制——类的单继承规则见 class.md但接口可以自由组合多个来源。典型用法是把可独立复用的小接口组合成领域模型interface HasName { name: string; } interface HasEmail { email: string; } interface Employee extends HasName, HasEmail { employeeId: string; department: string; }需要注意多重扩展时若多个父接口声明了同名但类型不兼容的属性会引发编译错误例如一个声明x: string、另一个声明x: numberTypeScript 无法自动调和冲突类型此时应改用组合或交叉类型方案。三、extends 的适用范围接口与类而非类型别名原文档给出了一个重要边界extends关键字只适用于interface和class对于type别名必须使用交叉类型type A { a: number; }; type B { b: number; }; type C A B;生成的是交叉类型Intersection Type它表示一个同时具备所有来源类型全部属性的值。这与接口继承在语义上等价type C A B要求C的值同时满足A和B的结构。仓库中 intersection-types.md 给出了交叉类型的完整定义与实例化示例type X { a: string; }; type Y { b: string; }; type J X Y; // Intersection const j: J { a: a, b: b, };实践建议简单对象结构的组合interface extends与type 均可用选其一即可当需要组合联合类型、元组、函数签名等复杂类型时只能使用type的/|接口无法表达这类结构这一点在 differences-between-type-and-interface.md 中有详细对比交叉类型允许覆盖式组合后出现的类型可以重新声明同名属性并给出更具体的类型这在接口继承中无法做到。四、接口扩展类型别名单向允许原文档最后一条规则是接口可以通过extends扩展一个类型别名但反过来类型别名去继承接口则不行type A { a: string; }; interface B extends A { b: string; }这条规则成立的前提是被扩展的type A必须是结构可确定的、能静态解析的对象类型object type。仓库的 object-types.md 指出类型别名与接口都用于描述对象的形状而接口不能extends联合类型这类无法静态展开的复杂类型。例如下面写法会报错type A { a: string } | { b: number }; // interface B extends A { } // Error接口不能扩展联合类型同时在 interface-and-type.md 中也可以看到interface与type声明对象形状的语法几乎一致属性加类型、方法加参数与返回类型这也是它们可以互相组合扩展的基础。五、extends 的另一重身份泛型约束extends在类型扩展之外还有一重重要职责——泛型约束。仓库的 generics.md 说明泛型参数可以通过extends限定其必须满足的类型形状const printLen T extends { length: number }(value: T): void { console.log(value.length); }; printLen(Hello); // 5 printLen([1, 2, 3]); // 3 printLen({ length: 10 }); // 10 printLen(123); // Invalid这里的T extends { length: number }表示任何具有数字类型length属性的类型字符串、数组、自定义对象均可通过而数字123被拒绝。这与接口继承共享同一关键字但语义是约束而非复制成员——理解这一点有助于阅读大量开源代码中的泛型签名。六、扩展与合并两个易混淆概念的辨析仓库的 merging-and-extension.md 专门区分了两个常被混用的概念合并Merging多个同名声明合并为一个定义。例如重复声明两次interface XTypeScript 会把两个块合并最终X同时拥有两块的成员interface X { a: string; } interface X { b: number; } const person: X { a: a, b: 7, };这种声明合并是interface独有的能力type别名不支持详见 differences-between-type-and-interface.md。它常用于为第三方库补充类型、或在不改动原定义的前提下扩展类型。扩展Extension从一个已有类型派生出新类型原始定义保持不动。这正是本文前面讨论的extends与interface Animal { name: string; eat(): void; } interface Bird extends Animal { sing(): void; }两者的关系可以概括为合并是同名叠加扩展是从既有类型派生新名类型。七、与类的继承、实现组合使用虽然extends也可用于类的继承class Dog extends Animal见 class.md但类型扩展最强大的地方在于与类体系配合接口继承类接口可以通过extends继承一个类的公开成员含public属性与方法签名用于描述实现了该类的对象形状类实现多个接口TypeScript 的类只能单继承一个基类但可以implements多个接口从多个来源获得结构契约interface Flyable { fly(): void; } interface Swimmable { swim(): void; } class FlyingFish implements Flyable, Swimmable { fly() { console.log(Flying...); } swim() { console.log(Swimming...); } }这正是接口多重扩展在实际项目中最重要的落地场景把能力拆成小型接口再通过组合extends组合接口、implements组合实现构造成完整的类。八、选型速查与小结需求场景推荐写法说明接口派生新接口interface B extends A {}支持单继承与多继承支持声明合并类型别名组合type C A B;交叉类型可组合联合类型等复杂结构接口复用类型别名interface B extends A {}单向允许A须为可解析的对象类型类型别名复用接口使用type C A B;别名不能用extends继承接口约束泛型参数T extends { length: number }extends在此表示约束而非继承扩展类的能力契约class X implements A, B {}弥补类单继承的限制总结而言extending-types.md 用最精简的四个示例勾勒出 TypeScript 类型扩展的完整边界接口用extends实现单/多继承类型别名用实现组合接口可以单向扩展类型别名而extends还兼任泛型约束。配合本仓库 table-of-contents.md 中Extending Types在类型系统章节的位置可将本文与交叉类型、接口与类型区别、合并与扩展、泛型等相邻主题intersection-types.md、interface-and-type.md、differences-between-type-and-interface.md、merging-and-extension.md、generics.md串联起来形成完整的类型系统知识闭环。中文读者还可对照仓库的 zh-cn 版本 extending-types.md 复习同样的示例代码。赞分享文档教程【免费下载链接】typescript-bookThe Concise TypeScript Book: A Concise Guide to Effective Development in TypeScript. Free and Open Source.项目地址https://gitcode.com/gh_mirrors/typ/typescript-book点击查看免费下载相关推荐TypeScript 类型扩展全指南interface extends、多重继承与交集类型实战The Concise TypeScript Book 精读TypeScript 类型扩展全指南interface extends、多重继承与交集类型实战The Concise TypeScript Book 精读文档教程TypeScript 类型扩展Extending Types完全指南interface 继承、多重扩展与交叉类型TypeScript 类型扩展Extending Types完全指南interface 继承、多重扩展与交叉类型 导读 在 TypeScript 的类型系文档教程TypeScript 类型扩展全解析interface 继承与交集类型的正确用法The Concise TypeScript Book 实战指南TypeScript 类型扩展全解析interface 继承与交集类型的正确用法The Concise TypeScript Book 实战指南 本文是《文档教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

YOLOV11模型如何训练】无人机视角公路两侧道路滑坡检测数据集 2026/9/25 15:20:56

YOLOV11模型如何训练】无人机视角公路两侧道路滑坡检测数据集

无人机视角公路俩边道路滑坡检测数据集】 无人机:DJI MAVIC 2 数据类型:原始图片XML标签TXT标签 总内存大小:459M(1892张图片) 图片分辨率:1280*720 采集高度:40~120m 采集角度&…

阅读更多 →
CTF入门必看:四大题型核心技巧与避坑指南 2026/9/25 15:20:55

CTF入门必看:四大题型核心技巧与避坑指南

刚入CTF坑的朋友常找我诉苦:题目也刷了,WriteUp也看了,可一上赛场还是两眼一抹黑,不知道从哪儿下手。说白了,大多数人是被题目种类绕晕了——CTF的题型看着五花八门,今天来个"盖房子"&#xff0c…

阅读更多 →
SQL注入之报错注入原理与实战:从报错函数到靶场通关 2026/9/25 15:20:49

SQL注入之报错注入原理与实战:从报错函数到靶场通关

1. 报错注入到底是啥:先搞懂"报错"这个动作的本质很多人第一次听说"报错注入"的时候,脑子里第一反应是:数据库都报错了,这不等于告诉管理员有人在搞事吗?还能利用报错来拿数据?我自己最…

阅读更多 →
Atlas 300V 24G推理卡部署YOLOv8实战:环境搭建、模型转换与性能调优 2026/9/25 15:20:35

Atlas 300V 24G推理卡部署YOLOv8实战:环境搭建、模型转换与性能调优

有没有被"atlas"这个词绕晕过?最近后台好几个朋友都在问同一个问题:Atlas 300V 24G到底是不是运算加速卡,以及怎么拿它在本地部署YOLO。我自己在边缘端做过几轮目标检测方案选型,把Atlas 300V这块卡从通电到跑起YOLOv8的…

阅读更多 →
在 VS Code 中,一键安装 MCP Server!TaoToken 统一 Key 配置实战 2026/9/25 15:20:16

在 VS Code 中,一键安装 MCP Server!TaoToken 统一 Key 配置实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
swagger-codegen 生成 Java 客户端 FakeApi 全端点实战指南:okhttp4-gson-parcelableModel 版本解析与调用 2026/9/25 15:20:15

swagger-codegen 生成 Java 客户端 FakeApi 全端点实战指南:okhttp4-gson-parcelableModel 版本解析与调用

开发工具代码生成API设计 【免费下载链接】swagger-codegen swagger-codegen contains a template-driven engine to generate documentation, API clients and server stubs in different languages by parsing your OpenAPI / Swagger definition. 项目地址: http…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉