TypeScript 类

TypeScript 中的类(Class)详解

TypeScript 的类(class)基于 ES6 类语法,并添加了强大的静态类型支持访问修饰符抽象类装饰器等特性,使其更接近传统面向对象语言(如 Java/C#),同时完全兼容 JavaScript。

1. 基本类声明与实例化
classPerson{name:string;// 实例属性(需手动声明)age:number;constructor(name:string,age:number){this.name=name;this.age=age;}greet():void{console.log(`Hello, I'm${this.name}`);}}letalice=newPerson("Alice",30);alice.greet();// "Hello, I'm Alice"

参数属性简写(推荐,减少冗余):

classPerson{constructor(publicname:string,// 自动声明 public name 并赋值privateage:number// 自动声明 private age 并赋值){}greet():void{console.log(`Hello, I'm${this.name}`);// console.log(this.age); // OK,在类内部可访问}}letbob=newPerson("Bob",25);console.log(bob.name);// OK// console.log(bob.age); // 错误:private
2. 访问修饰符(Access Modifiers)
修饰符作用范围示例
public默认,所有地方可访问public name: string
private仅类内部可访问private secret: string
protected类内部及子类可访问protected familyName: string
readonly只读(不能重新赋值,可结合以上)readonly id: number
classEmployee{constructor(publicname:string,privatesalary:number,protecteddepartment:string,readonlyid:number){}getInfo(){console.log(this.salary);// OKconsole.log(this.department);// OK}}classManagerextendsEmployee{manage(){// console.log(this.salary); // 错误:privateconsole.log(this.department);// OK:protected}}
3. 静态成员(Static Members)

属于类本身,而不是实例:

classMathUtils{staticPI:number=3.14159;staticcircleArea(radius:number):number{returnthis.PI*radius**2;}}console.log(MathUtils.PI);// 3.14159console.log(MathUtils.circleArea(5));// 通过类名调用
4. 类继承(Extends)与 super
classAnimal{constructor(publicname:string){}move(distance:number=0){console.log(`${this.name}moved${distance}m.`);}}classDogextendsAnimal{constructor(name:string,publicbreed:string){super(name);// 必须调用 super()}bark(){console.log("Woof!");}move(distance:number=5){super.move(distance);// 调用父类方法console.log("Dog is running!");}}letdog=newDog("Buddy","Golden");dog.bark();dog.move();// 先调用 Animal.move,再输出 "Dog is running!"
5. 抽象类(Abstract Class)

不能直接实例化,用于定义子类必须实现的成员:

abstractclassShape{abstractgetArea():number;// 抽象方法,必须在子类实现move(x:number,y:number){console.log(`Moved to (${x},${y})`);}}classCircleextendsShape{constructor(publicradius:number){super();}getArea():number{returnMath.PI*this.radius**2;}}letcircle=newCircle(10);console.log(circle.getArea());// let shape = new Shape(); // 错误:不能实例化抽象类
6. 类实现接口(Implements)

类可以实现一个或多个接口:

interfacePrintable{print():void;}interfaceLoggable{log(message:string):void;}classDocumentimplementsPrintable,Loggable{constructor(publictitle:string){}print(){console.log(`Printing${this.title}`);}log(message:string){console.log(`[${this.title}]${message}`);}}
7. getter / setter
classRectangle{constructor(private_width:number,private_height:number){}getarea():number{returnthis._width*this._height;}setwidth(value:number){if(value<=0)thrownewError("宽度必须正数");this._width=value;}}letrect=newRectangle(10,5);console.log(rect.area);// 50(调用 getter)rect.width=20;// 调用 setter
8. 类作为类型使用
classCar{constructor(publicbrand:string){}}letmyCar:Car=newCar("Tesla");functiondrive(vehicle:Car){console.log(`Driving${vehicle.brand}`);}
9. 装饰器(Decorators)—— 实验性特性(需启用experimentalDecorators

常用于框架(如 Angular、NestJS):

functionsealed(target:Function){Object.seal(target);Object.seal(target.prototype);}@sealedclassGreeter{greeting:string;constructor(message:string){this.greeting=message;}}
10. 最佳实践建议
建议说明
使用参数属性简写减少 constructor 冗余
优先使用privatereadonly封装性更好
抽象类用于定义通用行为强制子类实现关键方法
接口 + 类组合使用接口定义合约,类实现细节
静态成员用于工具方法/常量如配置、工厂方法
开启strictPropertyInitialization强制非 undefined 属性在 constructor 初始化
小结:类特性速查表
特性语法示例
基本类class Person { constructor(public name: string) {} }
访问修饰符private age: number
静态成员static count: number = 0
继承class Dog extends Animal {}
抽象类/方法abstract class Shape { abstract draw(): void; }
实现接口class User implements Printable {}
getter/setterget fullName(): string { return ... }

TypeScript 的类系统结合了现代 JS 的灵活性和强类型检查,是构建大型、可维护应用的核心工具,尤其在 Angular、NestJS 等框架中广泛使用。

如果您想深入某个部分(如泛型类装饰器实战类与模块的结合、或设计模式实现),请告诉我!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1045618.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Open-AutoGLM版本管理陷阱,3大高频故障场景下的精准回滚策略

第一章&#xff1a;Open-AutoGLM版本管理的核心挑战在大规模语言模型&#xff08;LLM&#xff09;开发中&#xff0c;Open-AutoGLM作为自动化生成与优化的前沿框架&#xff0c;其版本管理面临独特挑战。由于模型训练周期长、依赖复杂且多环境协同频繁&#xff0c;传统的Git-bas…

24、SharePoint 内容类型与工作流深度解析

SharePoint 内容类型与工作流深度解析 内容类型与工作流关联 在 SharePoint 中,我们很自然地会思考能否将工作流与内容类型关联起来。毕竟,我们已经能够将工作流与 SharePoint 列表和网站进行关联,那么内容类型为何不能呢? 当我们基于工作流设置将工作流与列表关联时,只…

Excalidraw AI生成内容的合规性审查机制

Excalidraw AI生成内容的合规性审查机制 在企业协作工具日益智能化的今天&#xff0c;一个看似简单的“画图”功能背后&#xff0c;可能潜藏着不小的安全风险。设想一位工程师在远程会议中使用AI助手快速绘制系统架构图时&#xff0c;顺手写下“数据库密码&#xff1a;root/ad…

别再手动调试了!5个Open-AutoGLM自动化脚本让你效率翻倍

第一章&#xff1a;告别手动调试的时代软件开发的演进史&#xff0c;本质上是一部调试效率的进化史。过去&#xff0c;开发者依赖打印日志、逐行断点和反复重启服务来定位问题&#xff0c;这种方式不仅耗时&#xff0c;还极易遗漏边界条件。如今&#xff0c;自动化调试工具与智…

中学应有的几何起码常识让2500年都无人能识的“更无理”数一下子浮出水面推翻“R完备、封闭”论

中学应有的几何起码常识让2500年都无人能识的“更无理”数一下子浮出水面推翻“R完备、封闭”论黄小宁初等数学应有几何起码常识&#xff1a;任何图T&#xff08;元点不少于两个&#xff09;的刚体运动都不可使T变为其部分图形。此常识让2500年都无人能识的“更无理”数一下子浮…

Obsidian使用学习

之前听说过Obsidian是一个不错的笔记管理软件&#xff0c;但一直没用过&#xff0c;最近研究了一下&#xff0c;发现管理markdown笔记文件确实很方便 1. 下载链接 软件下载链接&#xff1a;https://obsidian.md/ 2. 学习资源 网上有很多的学习资源&#xff0c;这里给出几个还…

Excalidraw AI无法识别指令怎么办?常见问题解答

Excalidraw AI无法识别指令怎么办&#xff1f;常见问题解答 在远程协作和敏捷开发日益成为主流的今天&#xff0c;可视化沟通的重要性愈发凸显。无论是产品原型讨论、系统架构设计&#xff0c;还是日常会议记录&#xff0c;一张清晰的草图往往胜过千言万语。然而&#xff0c;手…

为什么顶尖团队都在用Open-AutoGLM?一文看懂其架构设计精髓

第一章&#xff1a;为什么顶尖团队都在用Open-AutoGLM&#xff1f;在人工智能与自动化深度融合的今天&#xff0c;顶尖技术团队正加速转向高效、可扩展的智能开发框架。Open-AutoGLM 作为开源领域中首个融合大语言模型&#xff08;LLM&#xff09;推理与自动化任务执行的平台&a…

25、SharePoint工作流:全面指南

SharePoint工作流:全面指南 工作流完成状态与验证 当工作流完成时,“共享文档”列表中会新增一个名为“My First Workflow”的列,该列显示工作流的当前状态。若一切按预期完成,列中的值应为“Completed”;若工作流仍在运行,显示为“In Progress”;若出现问题,则显示“…

Excalidraw AI生成结果的人工审核流程

Excalidraw AI生成结果的人工审核流程 在技术团队频繁使用图表进行架构讨论、产品设计和系统规划的今天&#xff0c;如何快速、准确地将一个模糊的想法转化为清晰可视的结构图&#xff0c;已经成为影响协作效率的关键环节。Excalidraw 作为一款轻量级、手绘风格的在线白板工具&…

Open-AutoGLM模板怎么用?99%人都不知道的4个隐藏技巧

第一章&#xff1a;Open-AutoGLM流程模板的核心价值Open-AutoGLM流程模板作为新一代自动化生成语言模型任务编排框架&#xff0c;其核心价值在于将复杂的人工智能工作流抽象化、模块化与可复用化。该模板通过标准化接口定义和灵活的插件机制&#xff0c;显著降低了开发者在构建…

13、Windows 2000与Windows Server 2003集群及负载均衡配置详解

Windows 2000与Windows Server 2003集群及负载均衡配置详解 一、Windows 2000高级服务器NLB安装与高级设置 在使用Windows 2000高级服务器解决方案配置网络负载均衡(NLB)时,虽然我们已经掌握了所需的硬件、安装内容、安装方法以及控制NLB集群的配置设置,但在实际部署过程…

26、深入了解 SharePoint 工作流:从设计到导入

深入了解 SharePoint 工作流:从设计到导入 1. 认识 SharePoint Designer 中的工作流 如果你有过 SharePoint 定制经验,那对 Microsoft SharePoint Designer 应该不会陌生。它功能丰富,涵盖了从自定义母版页等 SharePoint 内容到设计工作流等方方面面。不过,使用 SharePoi…

Excalidraw AI推理对GPU算力的需求评估

Excalidraw AI推理对GPU算力的需求评估 在远程协作日益成为常态的今天&#xff0c;设计师、工程师和产品经理越来越依赖轻量级可视化工具快速表达复杂逻辑。Excalidraw 作为一款以“手绘风格”著称的开源白板应用&#xff0c;凭借其简洁界面与实时协同能力&#xff0c;在架构图…

还在写代码搭流程?Open-AutoGLM拖拽式方案让你领先同行3年

第一章&#xff1a;还在写代码搭流程&#xff1f;Open-AutoGLM拖拽式方案让你领先同行3年在传统开发模式中&#xff0c;构建一个AI驱动的业务流程往往需要数周甚至数月的编码、调试与集成。而随着低代码与AI深度融合的趋势加速&#xff0c;Open-AutoGLM 的出现彻底改变了这一局…

Excalidraw AI服务按Token计费模式探讨

Excalidraw AI服务按Token计费模式探讨 在远程协作日益成为常态的今天&#xff0c;团队对可视化工具的需求早已超越“画图”本身——他们需要的是快速表达意图、即时生成内容、无缝共享反馈的能力。而Excalidraw&#xff0c;这款以手绘风格著称的开源白板工具&#xff0c;正通过…

2025年12月企业管理咨询公司如何选?十大顶尖机构多维对比与避坑推荐 - 十大品牌推荐

在数字化转型与全球产业链重构的双重浪潮下,中国企业的管理升级已从“选修课”变为关乎生存的“必修课”。无论是传统制造业寻求精益化与智能化突破,还是新兴科技公司亟需构建可扩展的组织体系,企业主们普遍面临一个…

14、升级到 Windows Server 2003 集群解决方案的全面指南

升级到 Windows Server 2003 集群解决方案的全面指南 在服务器系统升级的过程中,从 Windows 2000 Advanced Server 升级到 Windows Server 2003 是一个重要的决策。本文将详细介绍升级的各个方面,包括规划、测试、具体操作步骤以及新系统的特性等内容。 1. 滚动升级规划 在…

15、深入解析Windows Server 2003集群服务的规划与配置

深入解析Windows Server 2003集群服务的规划与配置 1. 设计阶段的重要性 在实施集群之前,必须进行精心的规划和设计。设计阶段是项目中至关重要的部分,它明确了购买所需设备的预算以及分配给项目任务的资源。这里的资源不仅包括服务器和电缆,还涵盖了人员。例如,配置带有…

TypeScript 条件语句

TypeScript 条件语句详解 TypeScript 的条件语句语法与 JavaScript 完全相同&#xff0c;包括 if、else if、else、switch 和三元运算符。TypeScript 的优势在于类型缩小&#xff08;Type Narrowing&#xff09;&#xff1a;通过条件判断&#xff0c;TS 能在编译时自动推断变量…