HOW - 用 Typescript 编写一个比较好的 Class

目录

  • 一、介绍
  • 二、示例
    • 2.1 示例类代码
    • 2.2 单元测试

一、介绍

  1. 代码格式统一。包括统一缩进和尽量使用清晰且统一风格的变量和函数命名
  2. 注释和文档。编写必要且清晰的注释和文档
  3. 使用让面试官眼前一亮的现代新特性,代码简洁。例如可选链(Optional Chaining)、空值合并运算符(Nullish Coalescing Operator)等
  4. 执行性能有一定优化
  5. 遵循模块化设计。将代码分割成多个模块,便于管理和重用
  6. 错误处理。确保代码对错误有良好的处理机制,包括同步和异步错误
  7. 考虑到扩展性
  8. 单元测试

二、示例

以下是一个包含上述要素的示例TypeScript类,以及相应的单元测试:

2.1 示例类代码

// utils/Logger.ts
export class Logger {log(message: string): void {console.log(message);}error(message: string): void {console.error(message);}
}// models/User.ts
export class User {constructor(private id: number,private name: string,private email: string,private logger: Logger) {}// 获取用户的简短描述getSummary(): string {return `User: ${this.name} (${this.email})`;}// 更新用户邮箱updateEmail(newEmail: string): void {if (this.validateEmail(newEmail)) {this.email = newEmail;this.logger.log(`Email updated to ${newEmail}`);} else {this.logger.error('Invalid email address');}}// 验证邮箱格式private validateEmail(email: string): boolean {const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;return emailRegex.test(email);}
}// index.ts
import { Logger } from './utils/Logger';
import { User } from './models/User';const logger = new Logger();
const user = new User(1, 'John Doe', 'john.doe@example.com', logger);console.log(user.getSummary());
user.updateEmail('new.email@example.com');

2.2 单元测试

// tests/User.test.ts
import { Logger } from '../utils/Logger';
import { User } from '../models/User';describe('User', () => {let logger: Logger;let user: User;beforeEach(() => {logger = new Logger();user = new User(1, 'John Doe', 'john.doe@example.com', logger);});it('should return user summary', () => {expect(user.getSummary()).toBe('User: John Doe (john.doe@example.com)');});it('should update email if valid', () => {const newEmail = 'new.email@example.com';user.updateEmail(newEmail);expect(user.getSummary()).toBe(`User: John Doe (${newEmail})`);});it('should not update email if invalid', () => {const invalidEmail = 'invalid-email';user.updateEmail(invalidEmail);expect(user.getSummary()).toBe('User: John Doe (john.doe@example.com)');});
});

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

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

相关文章

《大道平渊》· 拾 —— 身心的“肥胖”与我们不知饥渴的病:追求中的丰盈与节制

《平渊》 拾 "水满则溢,月盈则亏。" 《道德经》有言:"水满则溢,月盈则亏"。 意思是:水满了就会溢出,月亮最圆的时候就会走向亏的状态。 这揭示了自然界和人类社会中一切事物的内在规律 —— 任…

[office] excel表格锁定计算公式的方法步骤 #经验分享#媒体#职场发展

excel表格锁定计算公式的方法步骤 Excel中经常需要使用到表格锁定公式的技巧,计算公式具体该如何锁定呢?接下来是小编为大家带来的excel表格锁定计算公式的方法,供大家参考。 excel表格锁定计算公式的方法 计算公式锁定步骤1:如图&#xff0…

Proxmox VE虚拟机与容器管理平台安装指南

上篇文章说了ESXI和Proxmox VE(简称pve)区别,由于需要从esxi5.迁移到PVE8.2,所以开始简单的在一个测试机上的部署个说明指南,以备无患。 一、引言 Proxmox VE是一款基于Debian Linux的完全开源平台,专为虚…

6-Maven的使用

6-Maven的使用 常用maven命令 //常用maven命令 mvn -v //查看版本 mvn archetype:create //创建 Maven 项目 mvn compile //编译源代码 mvn test-compile //编译测试代码 mvn test //运行应用程序中的单元测试 mvn site //生成项目相关信息的网站 mvn package //依据项目生成 …

【代码随想录】【算法训练营】【第30天】 [322]重新安排行程 [51]N皇后 [37]解数独

前言 思路及算法思维,指路 代码随想录。 题目来自 LeetCode。 day 30,周四,好难,会不了一点~ 题目详情 [322] 重新安排行程 题目描述 322 重新安排行程 解题思路 前提:…… 思路:回溯。 重点&…

023、键管理_数据库

dbsize、select、flushdb/flushall命令。 1.切换数据库 select dbIndexRedis默认配置中是有16个数据库: databases 16 select15选择最后一个数据库,不同库可以存在相同的键: 127.0.0.1:6379> set hello world #默认进到0号数据库 OK 127.0.0.1:6379> get hello &qu…

RabbitMQ--Hello World(基础详解)

文章目录 先决条件RabbitMQ 初识RabbitMQ--Hello World发送接收 更多相关内容可查看 先决条件 本教程假定 RabbitMQ 已安装并在标准端口 (5672) 上运行。如果你 使用不同的主机、端口或凭据,连接设置将需要 调整。如未安装可查看Windows下载…

【机器学习通用流程】

文章目录 一、机器学习概述1. 机器学习的定义2. 机器学习的分类3. 机器学习的应用实例 二、数据准备和预处理1. 数据采集2. 数据清洗3. 数据转换 三、选择合适的机器学习模型1. 常见的机器学习模型决策树(Decision Trees)支持向量机(Support …

Nvidia/算能 +FPGA+AI大算力边缘计算盒子:桥梁结构安全监测

中国铁路设计集团有限公司(简称中国铁设),原铁道第三勘察设计院集团有限公司(铁三院),是中国国家铁路集团有限公司所属的唯一设计企业,成立于1953年,总部位于天津市,是以…

f4pga环境搭建教程

f4pga环境搭建教程 背景介绍 FOSS Flows For FPGA (F4PGA) project,是一套开源的FPGA工具链,号称the GCC of FPGAs,作用是将写的硬件描述语言(verilog或VHDL)转化为可以在FPGA上运行的可执行文件(bit文件…

滨江区代理记账——专业、便捷的服务,让您的企业更加规范、高效

随着社会经济的发展和企业的规模扩大,依法纳税、做好财务工作变得越来越重要,而代理记账,就是这样一个专业的服务平台,为满足广大企业和个体户的会计需求,帮助他们规范财务管理,提高效率。 代理记账可以帮助…

基于R语言BIOMOD2 及机器学习方法的物种分布模拟与案例分析

原文链接:基于R语言BIOMOD2 及机器学习方法的物种分布模拟与案例分析https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247606139&idx4&snf94ec30bfb5fa7ac0320403d49db3b66&chksmfa821e9ccdf5978a44a9ba96f6e04a121c0bbf63beea0940b385011c0b…

MLU370-M8 chattts-ui快速出击

目录 一、paas平台环境选择二、代码环境准备1.代码下载2.环境安装modelsopetransformersaccelerate 3.常规pip安装4.代码修改4.代码修改 三.算法启动 一、paas平台环境选择 驱动选择:5.10.22及以上 镜像选择:pytorch2.1 二、代码环境准备 1.代码下载…

Web前端三大主流框架:React、Angular和Vue的技术解析

在当今的Web前端开发中,三大主流框架——React、Angular和Vue,以其各自的特色和优势,占据了重要的位置。本文将分别介绍这三个框架,分析它们的优缺点,并探讨它们在不同应用场景下的适用性。 一、React React是一个由…

李廉洋:6.6黄金原油怎么看?今日行情分析及最新策略。

黄金消息面分析:美指走强未能抑制金价升势。黄金价格大幅上涨,在美国公布喜忧参半的经济数据后,金价与周二的走势发生180度大转弯,这些数据可能保证美联储设定的借贷成本降低。美国10年期基准国债收益率下跌3个基点,至…

Spring Cloud工程添加子模块打包后文件为war包而非jar包

Spring Cloud工程添加子模块打包后文件为war包而非jar包 Spring Cloud子模块打出的包通常是JAR包而非WAR包,这是因为Spring Cloud主要基于Spring Boot构建,而Spring Boot默认打包为可执行JAR包。然而,如果遇到了Spring Cloud子模块打成了WAR…

【论文阅读】SELF-RAG,让模型决策和反思检索

关于LLM何时使用RAG的问题,原本是阅读了关于ADAPT-LLM模型的那篇论文,被问到与SELF-RAG有何区别。所以,大概看了一下SELF-RAG这篇论文,确实很像,这些基于LLM针对下游任务的模型架构和方法,本来就很像。不过…

【Mybatis】源码分析-自定义框架

1、自定义持久层框架 1.1、分析JDBC操作问题 package blnp.net.cn.jvm.demos;import java.sql.*;/*** <p></p>** author lyb 2045165565qq.com* createDate 2024/5/24 14:24*/ public class JdbcTest {public static void main(String[] args) {Connection conne…

红酒保存中的软木塞与瓶身保护

云仓酒庄雷盛红酒&#xff0c;以其卓着的品质和精美的包装赢得了众多消费者的喜爱。在红酒的保存过程中&#xff0c;软木塞与瓶身保护是至关重要的环节。本文将深入探讨这两方面的问题&#xff0c;以帮助消费者更好地理解和欣赏云仓酒庄雷盛红酒。 首先&#xff0c;我们来谈谈软…

gitee上传整个项目文件夹

1.访问git官网并下载 Git 如下图&#xff1a; 点击download&#xff0c;然后选择合适的版本进行下载&#xff1a; 如下图&#xff0c;我下载的是2.32.0.2版本&#xff0c;64位windows版。 下载完之后&#xff0c;直接点击安装。 然后根据向导&#xff0c;一路默认到安装完成。…