当前位置: 首页 > news >正文

TypeScript:类

一、基本概念

TypeScript 类是基于 ES6 类的语法扩展,增加了类型注解和访问修饰符等特性,提供了更强大的面向对象编程能力。

二、基本语法

class Person {name: string;age: number;constructor(name: string, age: number) {this.name = name;this.age = age;}greet() {return `Hello, my name is ${this.name}`;}
}

三、类的主要特性

1. 访问修饰符

  • public (默认):成员在任何地方都可访问

  • private:只能在类内部访问

  • protected:可在类及其子类中访问

class Animal {public name: string;private secret: string;protected age: number;
}

2. 只读属性

class Person {readonly birthDate: Date;
}

3. 参数属性

简化属性声明和赋值的语法:

class Person {constructor(public name: string, private age: number) {}// 等同于声明name和age并在构造函数中赋值
}

4. 存取器 (getters/setters)

class Employee {private _salary: number;get salary(): number {return this._salary;}set salary(newSalary: number) {if (newSalary >= 0) {this._salary = newSalary;}}
}

5. 静态成员

class Grid {static origin = { x: 0, y: 0 };static calculateDistance(point: {x: number, y: number}) {// ...}
}

6. 抽象类

abstract class Animal {abstract makeSound(): void; // 必须在派生类中实现move(): void {console.log("moving...");}
}

7. 类与接口

类可以实现接口:

interface ClockInterface {currentTime: Date;setTime(d: Date): void;
}class Clock implements ClockInterface {currentTime: Date = new Date();setTime(d: Date) {this.currentTime = d;}
}

四、继承

class Animal {move(distance: number = 0) {console.log(`Moved ${distance}m`);}
}class Dog extends Animal {bark() {console.log("Woof! Woof!");}
}

五、方法重写

class Animal {move(distance: number = 0) {console.log(`Moved ${distance}m`);}
}class Snake extends Animal {move(distance: number = 5) {console.log("Slithering...");super.move(distance);}
}

六、高级特性

1. 类类型

类既可以作为值使用,也可以作为类型使用:

class Greeter {greeting: string;constructor(message: string) {this.greeting = message;}
}let greeter: Greeter = new Greeter("world");

2. 构造函数类型

class Point {x: number;y: number;
}let PointConstructor: typeof Point = Point;
let point: Point = new PointConstructor();

3. 装饰器 (实验性特性)

@sealed
class Greeter {greeting: string;constructor(message: string) {this.greeting = message;}@enumerable(false)greet() {return "Hello, " + this.greeting;}
}

七、与ES6类的区别

  1. TypeScript类有类型注解

  2. 支持访问修饰符(public/private/protected)

  3. 支持抽象类和抽象方法

  4. 支持参数属性

  5. 支持接口实现检查

八、最佳实践

  1. 优先使用private/protected限制成员访问

  2. 考虑使用抽象类定义通用行为

  3. 合理使用接口来定义类的公共契约

  4. 对于简单的数据对象,考虑使用接口而不是类

TypeScript的类提供了强大的面向对象编程能力,同时保持了JavaScript的灵活性,是构建大型应用的理想选择。

相关文章:

  • 达利欧:“交易的艺术”与“背后的力量”
  • 了解光学影像
  • C#自定义控件-实现了一个支持平移、缩放、双击重置的图像显示控件
  • OpenCV人脸识别EigenFace算法、案例解析
  • MySQL 开发的智能助手:通义灵码在 IntelliJ IDEA 中的应用
  • 自营交易考试为何出圈?一场模拟交易背后的真实竞争
  • 为什么elasticsearch配置文件JVM配置31G最佳
  • 世界模型+大模型+自动驾驶 论文小汇总
  • 数据结构(九)——排序
  • Xournal++:开源跨平台笔记软件,手写与创作的完美结合
  • SQL笔记一
  • 1267, “Illegal mix of collations (latin1_swedish_ci,IMPLICIT
  • Spring MVC 接口的访问方法如何设置
  • 主流快递查询API横向对比:快递100快递鸟菜鸟物流接口差异解析
  • 本地 PC 使用Offset Explorer连接实体Ubuntu Kafka 【单机】超时问题解决
  • 印度Rummy游戏支付通道申请策略:技巧类游戏的合规与创新
  • 5.19 BGP实验
  • 动态规划之数列
  • 免疫浸润分析
  • C语言-8.数组
  • “9+2”复式票,浦东购彩者拿下体彩大乐透1153万头奖
  • 上海高院与上海妇联签协议,建立反家暴常态化联动协作机制
  • 获派驻6年后,中国驻厄瓜多尔大使陈国友即将离任
  • 南方降水频繁暴雨连连,北方高温再起或现40°C酷热天气
  • 来伊份发布关于消费者反映蜜枣粽问题处理的情况说明:与消费者达成和解
  • 上海建筑领域绿色发展2025年工作要点发布