news 2026/6/10 2:20:14

TypeScript 类

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 等框架中广泛使用。

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 13:36:20

Open-AutoGLM全流程解析(罕见高阶模板曝光)

第一章&#xff1a;Open-AutoGLM全流程解析概述Open-AutoGLM 是一个面向自动化自然语言理解与生成任务的开源框架&#xff0c;旨在通过统一接口实现从数据预处理、模型训练到推理部署的端到端流程。该框架融合了图神经网络与大语言模型的优势&#xff0c;支持动态任务编排与自适…

作者头像 李华
网站建设 2026/6/10 11:11:10

核心系统出错如何快速恢复?,深度解析Open-AutoGLM自动化回滚机制

第一章&#xff1a;核心系统故障与自动化恢复概述在现代分布式系统架构中&#xff0c;核心系统的稳定性直接决定了服务的可用性。面对硬件失效、网络中断或软件异常等不可预测因素&#xff0c;自动化恢复机制成为保障系统持续运行的关键手段。通过预设监控策略与自愈逻辑&#…

作者头像 李华
网站建设 2026/6/9 21:07:57

河图的演化过程与真相

河图演化如何知&#xff0c;听我细说各原由&#xff0c;首先把河图进行逆朔归源&#xff0c;拆分成上下两部分&#xff0c;也就是奇数与偶数各自独立的状态演化之间&#xff0c;这就叫回归真我本真&#xff0c;属于各自的演化之道。也就形成了奇数组合七五一与三五九的十字&…

作者头像 李华
网站建设 2026/6/10 13:47:38

大数据技术的基于Python的电影票房数据分析系统的设计与实现_70q9k530-爬虫 可视化

文章目录系统截图项目简介大数据系统开发流程主要运用技术介绍爬虫核心代码展示结论源码文档获取定制开发/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;系统截图 大数据技术的基于Python的电影票房数据分析系统的设计与实现_70q9k530-爬虫 可视化…

作者头像 李华
网站建设 2026/6/10 11:03:59

7、Windows Vista 文件管理与用户账户使用指南

Windows Vista 文件管理与用户账户使用指南 在日常使用计算机的过程中,我们经常需要对文件进行各种操作,同时如果多人共享一台计算机,也需要进行用户账户的管理。下面将详细介绍 Windows Vista 系统中文件管理和用户账户管理的相关操作。 一、文件操作 1. 文件复制 如果…

作者头像 李华
网站建设 2026/6/10 13:21:11

13、高效利用Windows Vista:日程管理与个性化设置指南

高效利用Windows Vista:日程管理与个性化设置指南 在现代快节奏的生活中,我们的日程安排日益繁忙,需要管理的预约和任务也越来越多。同时,我们也希望自己的电脑能够符合个人的使用习惯和审美需求。Windows Vista提供了强大的工具来帮助我们解决这些问题,下面将为大家介绍…

作者头像 李华