news 2026/5/1 1:56:48

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/4/26 13:09:37

Open-AutoGLM高效开发实战(拖拽式流程设计全曝光)

第一章&#xff1a;Open-AutoGLM高效开发概览Open-AutoGLM 是一个面向生成式语言模型自动化开发的开源框架&#xff0c;旨在简化从模型训练、微调到部署的全流程。其核心设计理念是通过声明式配置与模块化组件结合&#xff0c;提升开发效率并降低使用门槛。核心特性 支持多后端…

作者头像 李华
网站建设 2026/4/26 13:11:17

Excalidraw项目空间组织结构设计

Excalidraw项目空间组织结构设计 在远程协作成为常态的今天&#xff0c;团队沟通中最缺失的是什么&#xff1f;不是视频会议里的面孔&#xff0c;也不是即时消息中的文字&#xff0c;而是那块可以随手涂画、边说边改的白板。真实会议室里&#xff0c;一张草图往往胜过千言万语&…

作者头像 李华
网站建设 2026/4/26 13:09:57

错过后悔一年:Open-AutoGLM即将闭源,现在是最后的免费使用窗口期!

第一章&#xff1a;Open-AutoGLM 技术支持效率提升Open-AutoGLM 是一款基于开源大语言模型&#xff08;LLM&#xff09;的自动化代码生成与技术支持平台&#xff0c;专为开发者和运维团队设计&#xff0c;旨在显著提升技术响应速度与问题解决效率。通过深度集成自然语言理解能力…

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

6、电脑文件操作与媒体播放全攻略

电脑文件操作与媒体播放全攻略 在日常使用电脑的过程中,我们经常需要对各种文件进行操作,同时也会涉及到媒体文件的播放等功能。下面将为大家详细介绍电脑文件操作以及媒体播放的相关知识和操作步骤。 1. 刻录音乐文件到 CD 如果你想将电脑中的音乐文件刻录到 CD 上,可按…

作者头像 李华
网站建设 2026/4/26 13:09:43

测试工具选型指南:为软件测试从业者打造的实用手册

在当今快速迭代的软件开发环境中&#xff0c;测试工具的选择直接影响项目的效率、质量和成本。对于软件测试从业者而言&#xff0c;一个合适的测试工具不仅能提升测试覆盖率&#xff0c;还能优化团队协作&#xff0c;降低维护负担。然而&#xff0c;市场上工具琳琅满目&#xf…

作者头像 李华
网站建设 2026/4/28 17:00:37

11、互联网浏览与电子邮件使用指南

互联网浏览与电子邮件使用指南 1. 网页导航 在浏览网页时,我们常常需要返回之前访问过的页面,或者前进到后续访问过的页面。Internet Explorer 提供了便捷的操作方法。 - 返回上一页 :只需点击“Back”按钮,即可显示上一个访问的页面。 - 返回多个页面 :点击“Rece…

作者头像 李华