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

作者 : admin 本文共1859个字,预计阅读时间需要5分钟 发布时间: 2024-06-6 共2人阅读

目录

  • 一、介绍
  • 二、示例
    • 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)');
});
});
本站无任何商业行为
个人在线分享 » HOW – 用 Typescript 编写一个比较好的 Class
E-->