TypeScript 类完全指南:TypeScript-New-Handbook 从继承到 this 管理

发布时间:2026/10/6 23:52:10

TypeScript 类完全指南:TypeScript-New-Handbook 从继承到 this 管理 TypeScript 类完全指南TypeScript-New-Handbook 从继承到 this 管理【免费下载链接】TypeScript-New-HandbookIncubation repository for the new TypeScript handbook 项目地址: https://gitcode.com/gh_mirrors/ty/TypeScript-New-HandbookTypeScript 类class是前端与后端开发者都绕不开的核心语法它把 ES2015 的类机制与类型系统结合在一起让面向对象编程变得更安全、更可维护。本文将基于官方孵化手册TypeScript-New-Handbook的 Classes 章节为你系统梳理 TypeScript 类继承、成员可见性、抽象类与 this 管理的完整知识即使你刚接触 TypeScript也能轻松上手。为什么 TypeScript 类值得系统学习JavaScript 的类本身就有不少怪脾气比如this的指向问题、构造函数的初始化顺序等。TypeScript 在保留原有运行机制的基础上增加了类型注解、可见性修饰符、抽象类等能力把很多运行时才能暴露的错误提前到编译阶段。TypeScript-New-Handbook 是微软团队编写的新版手册其中 chapters/Classes.md 一章用通俗语言 大量可运行示例把类的方方面面讲得清清楚楚非常值得当作入门教材反复翻阅。TypeScript 类基础成员字段、构造函数与方法字段声明与类型推断在类中声明字段field可以直接标注类型也可以省略类型让 TypeScript 根据初始化值自动推断class Point { x: number; y 0; // 类型自动推断为 number }如果你开启了strictPropertyInitialization未在构造函数中初始化的字段会直接报错这时可以用!断言操作符声明我一定会初始化它。此外readonly修饰符可以防止字段在构造函数之外被重新赋值。构造函数与 super 调用构造函数与普通函数非常相似支持默认参数、重载但有两点差异不能写类型参数也不能写返回类型注解。当类存在基类时在构造函数里使用this之前必须先调用super()否则 TypeScript 会给出错误提示——这个检查能帮你避开 JavaScript 里最常见的坑class Base { k 4; } class Derived extends Base { constructor() { console.log(this.k); // 错误必须先调用 super() super(); } }方法、getter 与 setter方法体内访问字段必须使用this.前缀否则会引用到外层作用域的变量。类还支持 getter/setter 访问器注意只有 getter 没有 setter 的属性会被自动视为readonly。TypeScript 类继承extends 与 implementsextends 继承基类使用extends可以继承基类的全部属性和方法子类还能重写override基类方法并通过super.调用基类实现。TypeScript 强制要求派生类始终是基类的子类型这意味着重写方法时参数不能比基类更苛刻否则通过基类引用调用时会直接崩溃class Base { greet() { console.log(Hello, world!); } } class Derived extends Base { greet(name?: string) { if (name undefined) { super.greet(); } else { console.log(Hello, ${name}); } } }初始化顺序最容易踩坑JavaScript 类的初始化顺序是固定的先初始化基类字段 → 执行基类构造函数 → 再初始化派生类字段 → 执行派生类构造函数。所以基类构造函数里访问到的name是自己的值而不是子类覆盖后的值。理解这个顺序能避免很多结果和直觉不符的诡异 bug。implements 只做检查不改类型implements用于检查类是否满足某个interface的约定但它不会改变类的类型推断。比如接口中方法参数标注了string实现类里写s依然会被推断为隐式any接口的可选属性也不会自动出现在类上。记住这一点就不会对implements产生误解。成员可见性public、protected、privateTypeScript 提供了三级可见性控制修饰符类内访问子类访问外部访问public默认✅✅✅protected✅✅❌private✅❌❌几个细节值得注意派生类可以把protected成员提升为public但若无意暴露记得重复写protectedTypeScript 允许同类不同实例互相访问private成员更重要的是private/protected只在编译期生效运行时通过属性查找依然能拿到值真正需要硬保护时应使用闭包、WeakMap 或原生#私有字段。抽象类与泛型类面向对象的进阶利器抽象类abstract class不能直接实例化只能作为基类使用子类必须实现其中的抽象方法或抽象字段abstract class Base { abstract getName(): string; printName() { console.log(Hello, this.getName()); } } class Derived extends Base { getName() { return world; } }泛型类则允许用类型参数把内容类型抽象出来如class BoxT实例化时类型参数会自动推断。注意泛型类的static成员永远不能引用类型参数因为运行时只存在一个静态属性槽位。this 管理箭头函数与 this 参数JavaScript 中this的值取决于函数如何被调用把方法从对象上拆下来单独调用时this就会丢失。TypeScript 提供了两种优雅的解决方案箭头函数属性getName () this.name保证运行时this永远正确但每个实例都会多一份函数拷贝且无法用super调用基类方法this 参数getName(this: MyClass)在编译期强制检查调用上下文只分配一份函数且支持super.但 JS 调用方仍可能在运行时出错。两种方案各有取舍根据场景二选一即可。this 类型让链式调用更聪明在类的方法返回值上TypeScript 会推断出动态的this类型而非固定的类名。这意味着子类调用set()后返回的是子类实例链式调用时不会丢失子类的类型信息配合sameAs(other: this)这类参数还能限制方法只接受同类型实例非常实用。结合官方手册的完整学习路径想系统掌握全部知识点直接研读 chapters/Classes.md共约 1171 行含大量可运行示例想总览全局知识结构可查看 meta/OUTLINE.md 与 structure.json想了解整本手册的写作规范与阅读方式参考 meta/AUTHORING.md本地体验完整教程可运行npm run start启动开发服务器或直接阅读渲染后的 docs/chapters/classes/index.html。如果你希望克隆仓库亲手实践仓库地址为https://gitcode.com/gh_mirrors/ty/TypeScript-New-Handbook。从字段、构造函数这些基础成员到继承、可见性、抽象类再到最让人头疼的 this 管理掌握好这条主线你的 TypeScript 面向对象编程就能快速进入实战状态。【免费下载链接】TypeScript-New-HandbookIncubation repository for the new TypeScript handbook 项目地址: https://gitcode.com/gh_mirrors/ty/TypeScript-New-Handbook创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/10/6 23:52:21

PDF补丁丁批量文本替换实战:从逐条手改书签到一键全量更新

PDF补丁丁批量文本替换实战:从逐条手改书签到一键全量更新 【免费下载链接】PDFPatcher PDF补丁丁——PDF工具箱,可以编辑书签、剪裁旋转页面、解除限制、提取或合并文档,探查文档结构,提取图片、转成图片等等 项目地址: https:…

2026/10/6 23:53:25

如何用 TaskNotes 插件把 Obsidian 变成你的终极任务管理中心

如何用 TaskNotes 插件把 Obsidian 变成你的终极任务管理中心 【免费下载链接】tasknotes Task and time-tracking management with calendar integration for Obsidian 项目地址: https://gitcode.com/gh_mirrors/ta/tasknotes 你有没有过这样的瞬间:任务分…

2026/10/7 10:25:42

C#.NET大文件夹上传方案:分片上传与断点续传实战

直接切入正题。我接手过一个内部系统,需求描述很简短:“用户要把整个项目目录拖进网页里传上去,服务器上要能看到一模一样的文件夹结构。” 听起来跟平时传几个文件没啥区别,但做过上传功能的人都知道,这句话背后全是坑…

2026/10/7 10:25:42

成渝城市群矢量数据实战:shp体检、POI空间连接与坐标处理

简介:资源聚焦成渝城市群空间数据应用场景,面向地理信息系统、城市规划与科研项目中需要学校、医院等POI及道路、建筑轮廓等基础矢量数据的开发者和研究人员。数据年限为2019年,POI信息经网络地图爬取并完成导出、裁剪等处理,统一…

2026/10/7 10:25:42

Spring Boot实战指南:环境配置、项目搭建与监控避坑

前几天后台收到一条很典型的私信:课设题目是《基于 Spring Boot 的大学生就业推荐系统》,代码是从某个开源社区下载的 Spring Boot MyBatis 多商户跨境电商源码,结果第一次跑就撞上 8080 端口冲突,改完端口又报数据源初始化失败&…

2026/10/7 10:25:42

Spring Boot高校就业招聘系统实战:从零搭建到答辩全流程

如果你正在准备Java方向的课程设计,或者毕业设计还在纠结选题,我建议你认真看一下高校就业招聘系统这个方向。它听起来像是普通的CRUD项目,但真正把一个带四类角色、完整招聘闭环、还能顺畅演示的系统做下来,能练到的东西比单纯敲…

2026/10/7 10:20:41

Linux内核心智模型与设计哲学:五张地图助你掌握内核

我最早萌生写这个Linux内核专栏的想法,是在帮团队排查一个线上问题之后。当时业务方报了一个诡异的性能抖动,现象是延迟每隔几秒就飙高一次,用top看CPU不高,用iostat看磁盘也不忙,半年经验的同事拿着strace反复抓系统调…

2026/10/5 6:32:56

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/7 8:18:33

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/6 17:46:51

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

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

2026/10/7 1:05:03

ESP32免重刷固件:浏览器直接修改NVS键值实现WiFi配置更新

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

2026/10/7 1:05:03

SAP HANA查询结果导出CSV:避开乱码、性能与权限的实用指南

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

2026/10/7 1:05:03

数字后端Placement阶段Density与Congestion控制实战

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

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑