目录
一、介绍
- 代码格式统一。包括统一缩进和尽量使用清晰且统一风格的变量和函数命名
- 注释和文档。编写必要且清晰的注释和文档
- 使用让面试官眼前一亮的现代新特性,代码简洁。例如可选链(Optional Chaining)、空值合并运算符(Nullish Coalescing Operator)等
- 执行性能有一定优化。
- 遵循模块化设计。将代码分割成多个模块,便于管理和重用
- 错误处理。确保代码对错误有良好的处理机制,包括同步和异步错误
- 考虑到扩展性。
- 单元测试。
二、示例
以下是一个包含上述要素的示例TypeScript类,以及相应的单元测试:
2.1 示例类代码
typescript
// 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 单元测试
typescript
// 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)');
});
});