news 2026/5/11 14:30:33

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/5/9 6:12:58

Open-AutoGLM实战指南(自定义任务链构建与优化大公开)

第一章&#xff1a;Open-AutoGLM实战入门与核心概念Open-AutoGLM 是一个面向自动化自然语言处理任务的开源框架&#xff0c;专为简化大语言模型&#xff08;LLM&#xff09;在实际业务场景中的部署与调优而设计。其核心理念是通过声明式配置驱动模型推理、微调与评估流程&#…

作者头像 李华
网站建设 2026/5/10 5:19:44

Open-AutoGLM流程模板实战:3步构建企业级AI推理流水线

第一章&#xff1a;Open-AutoGLM流程模板分享Open-AutoGLM 是一个面向自动化生成语言模型任务的开源流程框架&#xff0c;旨在通过标准化模板提升开发效率与模型复用能力。该框架支持从数据预处理、提示工程构建到模型推理与评估的全流程管理。核心组件结构 config&#xff1a;…

作者头像 李华
网站建设 2026/5/10 12:16:32

手把手教你打造专属AI工作流,Open-AutoGLM高级用法全曝光

第一章&#xff1a;Open-AutoGLM 自定义任务流程概述Open-AutoGLM 是一个面向自然语言处理任务的自动化大模型调用框架&#xff0c;支持用户通过声明式配置快速构建和执行自定义任务。其核心设计理念是将任务拆解为可复用的模块&#xff0c;包括输入解析、指令生成、模型调用、…

作者头像 李华
网站建设 2026/5/10 9:09:12

某次页面加载首屏慢 后来才知道用dns.lookup预解析关键域名

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 目录Node.js&#xff1a;一个程序员的深夜自白&#xff08;附咖啡渍代码&#xff09; 我的Node.js初体验 Node.js的"中年危…

作者头像 李华
网站建设 2026/5/9 16:15:24

【Open-AutoGLM无代码革命】:零基础实现AI流程设计的5大核心技巧

第一章&#xff1a;Open-AutoGLM无代码革命的背景与意义在人工智能技术迅猛发展的今天&#xff0c;大语言模型&#xff08;LLM&#xff09;正逐步成为推动数字化转型的核心引擎。然而&#xff0c;传统AI开发依赖大量编程技能、算力资源和领域知识&#xff0c;限制了其在中小型企…

作者头像 李华