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的灵活性,是构建大型应用的理想选择。

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

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

相关文章

抢购Python代码示例与技术解析

引言:抢购系统的技术挑战 在当今电子商务高度发达的时代,抢购活动已成为各大电商平台吸引用户的重要手段。然而,高并发、低延迟的抢购场景对系统设计提出了严峻挑战。本文将提供一个完整的Python抢购代码示例,并深入分析其技术实…

实战分析Cpython逆向

Cpython逆向 Python代码转换为C代码的时候,将会大大增加框架代码量。 1、正向py->c 先有正向,再有逆向 pip install cython 写一个简单的pyx文件 .pyx 文件是由 Cython 编程语言 "编写" 而成的 Python 扩展模块源代码文件 print(&qu…

Modbus转IEC104网关(三格电子)

产品概述 Modbus转IE104网关型号SG-TCP-IEC104,是三格电子推出的工业级网关(以下简称网关),主要用于Modbus RTU/TCP/ASCII数据采集、DLT645-1997/2007数据采集,可接多功能电力仪表、温控仪、电表等,将采集…

智能工具协同赋能STEM教育科研|探索LLM大语言模型和数学软件Maple的创新实践

LLM 与 Maple:开启 STEM 教育科研新范式 在当今数字化浪潮下,教育与科研领域正面临着前所未有的变革机遇。大语言模型(LLM)的横空出世,为知识生成、问题求解等带来了全新思路;而数学软件 Maple 以其强大的…

专项智能练习(定义判断)_DA_01

1. 单选题 热传导是介质内无宏观运动时的传热现象,其在固体、液体和气体中均可发生。但严格而言,只有在固体中才是纯粹的热传导,在流体(泛指液体和气体)中又是另外一种情况,流体即使处于静止状态&#xff0…

pandas读取pymysql和解析excel的一系列问题(版本不匹配)

pandas读取pymysql和解析excel的一系列问题,大部分都是版本不匹配导致的 尤其是pandas,numpy,pymysql,openpyxl不匹配导致 from sqlalchemy import create_engine import numpy as np import pandas as pd conncreate_engine("mysqlpymysql://user:passhost:3…

【中级软件设计师】网络攻击(附软考真题)

【中级软件设计师】网络攻击(附软考真题) 目录 【中级软件设计师】网络攻击(附软考真题)一、历年真题二、考点:网络攻击1、拒绝服务攻击(DoS攻击)2、重放攻击3、特洛伊木马4、网络监听5、SQL注入…

20250515配置联想笔记本电脑IdeaPad总是使用独立显卡的步骤

20250515配置联想笔记本电脑IdeaPad总是使用独立显卡的步骤 2025/5/15 19:55 百度:intel 集成显卡 NVIDIA 配置成为 总是用独立显卡 百度为您找到以下结果 ?要将Intel集成显卡和NVIDIA独立显卡配置为总是使用独立显卡,可以通过以下步骤实现?&#xff…

【C++ | 内存管理】C++ 智能指针 std::shared_ptr 详解及使用例子代码

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…

【CF】Day59——Codeforces Round 914 (Div. 2) D

D. Set To Max 题目: Easy 思路: 简单题 由于题目的数据给的很小,所以我们可以用 n 的复杂度过,那我们来观察一下我们应该怎么操作 显然,如果 a[i] > b[i] 时是无法构造的,同时 a[i] b[i] 时就不用管…

解密企业级大模型智能体Agentic AI 关键技术:MCP、A2A、Reasoning LLMs- GPT源代码解析

解密企业级大模型智能体Agentic AI 关键技术:MCP、A2A、Reasoning LLMs- GPT源代码解析 我们可以稍微看一下, 这是我们GPT的基于它的源代码产生的可视化的内容。 这边是model ,我们在谈这个sampling的时候,本身首先就是说它这个probability distribution ,会有很多的参数…

AI 推理 | vLLM 快速部署指南

本文是 AI 推理系列的第一篇,近期将更新与 vLLM 的相关内容。本篇从 vLLM 的部署开始,介绍 vLLM GPU/CPU 后端的安装方式,后续将陆续讲解 vLLM 的核心特性,如 PD 分离、Speculative Decoding、Prefix Caching 等,敬请关…

Python-MCPInspector调试

Python-MCPInspector调试 使用FastMCP开发MCPServer,熟悉【McpServer编码过程】【MCPInspector调试方法】-> 可以这样理解:只编写一个McpServer,然后使用MCPInspector作为McpClient进行McpServer的调试 1-核心知识点 1-熟悉【McpServer编…

Linux 常用命令 -hostnamectl【主机名控制】

简介 hostnamectl 命令中的 “hostname” 顾名思义,指的是计算机在网络上的名称,“ctl” 是 “control” 的缩写,意味着控制。hostnamectl 命令用于查询和修改系统主机名以及相关的设置。它通过与 systemd 系统管理器交互,允许用…

力扣-二叉树-101 对称二叉树

思路 分解问题为,该节点的左孩子的左子树和右孩子的右子树是不是同一棵树 && 该节点的左孩子的右字数和右孩子的左子树是不是同一课树 && 该节点的左右孩子的值相不相同 代码 class Solution {public boolean isSymmetric(TreeNode root) {// 层…

Nginx技术方案【学习记录】

文章目录 1. 需求分析1.1 应用场景1.2 实现目标 2. Nginx反向代理与实现均衡负载2.1 部署架构2.2 架构描述2.2.1 Nginx代理服务器2.2.2 API服务器与API服务器(Backup)2.2.3 nginx.conf配置文件2.2.4 测试方法 3. 高速会话缓存技术3.1 问题背景3.2 使用 R…

Ubuntu22.04怎么退出Emergency Mode(紧急模式)

1.使用nano /etc/fstab命令进入fstab文件下; 2.将挂载项首行加#注释掉,修改完之后使用ctrlX退出; 3.重启即可退出紧急模式!

Unity 红点系统

首先明确一个,即红点系统的数据结构是一颗树,并且红点的数据结构的初始化需要放在游戏的初始化中,之后再是对应的红点UI侧的注册,对应的红点UI在销毁时需要注销对红点UI的显示回调注册,但是不销毁数据侧的红点注册 - …

极新携手火山引擎,共探AI时代生态共建的破局点与增长引擎

在生成式AI与行业大模型的双重驱动下,人工智能正以前所未有的速度重构互联网产业生态。从内容创作、用户交互到商业决策,AI技术渗透至产品研发、运营的全链条,推动效率跃升与创新模式变革。然而,面对AI技术迭代的爆发期&#xff0…

【Redis】SDS结构

目录 1、背景2、SDS底层实现 1、背景 redis作为高性能的内存数据库,对字符串操作(如键、值的存储)有极高的要求。c语言原生字符串(以\0结尾的字符串数据)有一些缺点:长度计算需要遍历(O(n)时间…