10 Thói Quen Xấu Trong Lập Trình TypeScript Cần Từ Bỏ Để Viết Mã Tốt Hơn Năm 2024
TypeScript là ngôn ngữ lập trình đang được ưa chuộng nhờ những lợi ích của kiểu tĩnh và tính linh hoạt của JavaScript. Tuy nhiên, khi ngày càng có nhiều lập trình viên sử dụng TypeScript, một số thói quen xấu đã trở thành trở ngại cho việc viết mã hiệu quả. Trong bài viết này, chúng tôi sẽ điểm qua 10 thói quen xấu mà bạn cần từ bỏ trong năm 2024 để nâng cao chất lượng mã của mình.
1. Không Bật Chế Độ strict
Nhiều lập trình viên thường tắt chế độ strict
trong TypeScript để đơn giản hóa quá trình phát triển. Tuy nhiên, điều này có thể dẫn đến việc giảm mức độ an toàn và khiến mã trở nên dễ xảy ra lỗi.
Giải pháp: Hãy bật chế độ strict
trong tệp tsconfig.json
để tận dụng hết các kiểm tra lỗi của TypeScript.
json
{
"compilerOptions": {
"strict": true
}
}
2. Lạm Dụng Kiểu any
Việc sử dụng kiểu any
một cách thái quá có thể làm giảm khả năng kiểm tra lỗi của TypeScript. Điều này có thể dẫn đến những lỗi không mong muốn trong quá trình chạy ứng dụng.
Giải pháp: Hãy sử dụng các kiểu rõ ràng hơn như unknown
hoặc định nghĩa rõ ràng kiểu dữ liệu của bạn.
typescript
let data: unknown;
if (typeof data === "string") {
console.log(data.toUpperCase());
}
3. Lạm Dụng Kiểu Khẳng Định (Type Assertion)
Mặc dù kiểu khẳng định (as
) có thể rất hữu ích, việc sử dụng nó một cách bừa bãi có thể vô tình biến mã của bạn trở nên không an toàn.
Giải pháp: Hãy sử dụng các bộ bảo vệ kiểu để đảm bảo rằng bạn kiểm tra rõ ràng trước khi sử dụng các giá trị.
typescript
function isString(value: unknown): value is string {
return typeof value === 'string';
}
if (isString(data)) {
console.log(data.toUpperCase());
}
4. Bỏ Qua Kiểu Union và Intersection
Kiểu Union (|
) và kiểu Intersection (&
) giúp bạn mô tả cấu trúc dữ liệu một cách chính xác và cô đọng hơn.
Giải pháp: Hãy tận dụng kiểu Union và Intersection để tạo ra các định nghĩa kiểu linh hoạt và có thể tái sử dụng.
typescript
type Admin = { isAdmin: true; privileges: string[] };
type User = { isAdmin: false; email: string };
type Person = Admin | User;
function logUser(person: Person) {
if (person.isAdmin) {
console.log(person.privileges);
} else {
console.log(person.email);
}
}
5. Kiểu Trả Về Không Rõ Ràng
Việc không chỉ định kiểu trả về cho các hàm có thể khiến người dùng phải tự suy đoán kết quả, điều này làm tăng khả năng xảy ra lỗi và giảm khả năng bảo trì mã.
Giải pháp: Hãy luôn chỉ định kiểu trả về rõ ràng cho hàm của bạn, sử dụng kiểu hợp nếu cần thiết.
typescript
function fetchData(): Promise<{ id: number; name: string }> {
return fetch("/data").then(response => response.json());
}
6. Bỏ Qua null
và undefined
Nhiều lập trình viên không xử lý đầy đủ các giá trị null
và undefined
, dẫn đến lỗi không mong muốn khi truy cập thuộc tính hoặc gọi phương thức.
Giải pháp: Sử dụng toán tử tùy chọn và nullish coalescing
để xử lý an toàn các giá trị này.
typescript
const name = user?.profile?.name ?? "Guest";
7. Lạm Dụng Enums
Enums thường được sử dụng cho các hằng số đơn thuần, trong khi có thể sử dụng kiểu chữ hoặc các đối tượng const
đơn giản hơn.
Giải pháp: Hãy chọn biến kiểu string hoặc const cho các giá trị không thay đổi.
typescript
type Role = "Admin" | "User" | "Guest";
let userRole: Role = "Admin";
8. Không Sử Dụng readonly
Việc không khai báo readonly
cho các thuộc tính có thể dẫn đến việc sửa đổi không mong muốn, dễ gây ra lỗi rất khó phát hiện.
Giải pháp: Hãy sử dụng readonly
để đảm bảo rằng các đối tượng của bạn không bị thay đổi một cách ngẫu nhiên.
typescript
const data: readonly number[] = [1, 2, 3];
9. Bỏ Qua Bộ Bảo Vệ Kiểu Tùy Chỉnh
Việc dựa vào kiểm tra kiểu ngầm định có thể gây ra việc bỏ sót một số kiểu trong thời gian chạy, gây ra lỗi không mong đợi.
Giải pháp: Implement bộ bảo vệ kiểu để kiểm tra rõ ràng giá trị trước khi sử dụng.
typescript
function isUser(user: any): user is User {
return typeof user.email === "string";
}
10. Không Tận Dụng Kiểu unknown
Khi gặp các kiểu không xác định, nhiều lập trình viên thường chọn dùng any
. Điều này làm giảm hiệu quả kiểm tra kiểu của TypeScript.
Giải pháp: Hãy sử dụng unknown
thay vì any
và thu hẹp kiểu khi cần thiết để đảm bảo tính an toàn.
typescript
let input: unknown;
if (typeof input === "string") {
console.log(input.toUpperCase());
}
Kết Luận
Việc từ bỏ 10 thói quen xấu này sẽ giúp bạn nâng cao chất lượng mã trong TypeScript vào năm 2024. Bằng cách áp dụng các phương pháp tốt nhất, bạn không chỉ viết mã sạch hơn mà còn trở thành một lập trình viên hiệu quả hơn.
source: viblo