TypeScript không chỉ hỗ trợ các kiểu dữ liệu cơ bản mà còn cung cấp nhiều kiểu đặc biệt giúp lập trình viên xây dựng mã nguồn an toàn và dễ bảo trì hơn. Trong bài viết này, chúng ta sẽ tìm hiểu về các kiểu đặc biệt trong TypeScript, bao gồm Union, Intersection, Literal, Nullable, và Never.
Bài viết này là một phần của chuỗi học lập trình trên "codetuthub.com", cùng với các bài học khác như TypeScript Simple Types, TypeScript Functions, và TypeScript Interfaces.
1. Kiểu hợp nhất (Union Types)
Kiểu hợp nhất cho phép bạn xác định một biến có thể chứa nhiều kiểu dữ liệu khác nhau. Bạn sử dụng dấu | để phân tách các kiểu.
Ví dụ về kiểu hợp nhất
let id: string | number;
id = 123; // Hợp lệ
id = "ABC"; // Hợp lệTrong ví dụ này, biến id có thể là một chuỗi hoặc một số.
2. Kiểu giao thoa (Intersection Types)
Kiểu giao thoa cho phép bạn kết hợp nhiều kiểu lại với nhau. Điều này hữu ích khi bạn muốn tạo ra một kiểu mới từ các kiểu có sẵn.
Ví dụ về kiểu giao thoa
interface Person {
name: string;
}
interface Employee {
employeeId: number;
}
type Worker = Person & Employee;
const worker: Worker = {
name: "Alice",
employeeId: 101
};Trong ví dụ này, Worker là một kiểu giao thoa kết hợp giữa Person và Employee, yêu cầu đối tượng phải có cả hai thuộc tính.
3. Kiểu chữ (Literal Types)
Kiểu chữ cho phép bạn định nghĩa các giá trị cụ thể mà một biến có thể nhận. Điều này giúp cải thiện tính an toàn cho mã nguồn của bạn.
Ví dụ về kiểu chữ
type Direction = "up" | "down" | "left" | "right";
function move(direction: Direction) {
console.log(`Moving ${direction}`);
}
move("up"); // Hợp lệ
move("left"); // Hợp lệ
move("forward"); // Lỗi: Argument of type '"forward"' is not assignable to parameter of type 'Direction'.Trong ví dụ này, biến direction chỉ có thể nhận các giá trị "up", "down", "left", hoặc "right".
4. Kiểu Null và Undefined
TypeScript cho phép bạn chỉ định rằng một biến có thể là null hoặc undefined bằng cách sử dụng các kiểu này trong khai báo.
Ví dụ về kiểu null và undefined
let value: number | null = null; // Hợp lệ
let notAssigned: string | undefined; // Hợp lệ
notAssigned = "Hello"; // Có thể gán giá trị
notAssigned = undefined; // Hợp lệNếu bạn muốn đảm bảo rằng một biến không bao giờ có giá trị null hoặc undefined, bạn có thể bật tùy chọn strictNullChecks trong tệp tsconfig.json.
5. Kiểu Never
Kiểu never được sử dụng để chỉ ra rằng một hàm không bao giờ trả về. Điều này có thể xảy ra trong các tình huống như ném lỗi hoặc khi một vòng lặp vô hạn xảy ra.
Ví dụ về kiểu never
function throwError(message: string): never {
throw new Error(message);
}
function infiniteLoop(): never {
while (true) {}
}Trong ví dụ này, hàm throwError sẽ ném lỗi và không bao giờ trả về giá trị.
6. Kiểu tùy chọn (Optional Types)
TypeScript cho phép bạn đánh dấu các thuộc tính của đối tượng là tùy chọn bằng cách sử dụng dấu ?. Điều này có nghĩa là thuộc tính đó có thể tồn tại hoặc không.
Ví dụ về kiểu tùy chọn
interface User {
name: string;
age?: number; // age là tùy chọn
}
const user1: User = { name: "Alice" }; // Hợp lệ
const user2: User = { name: "Bob", age: 30 }; // Hợp lệTrong ví dụ này, thuộc tính age là tùy chọn, do đó bạn có thể tạo đối tượng User mà không cần cung cấp giá trị cho age.
7. Kết luận
TypeScript cung cấp nhiều kiểu đặc biệt giúp bạn viết mã an toàn và dễ bảo trì hơn. Việc sử dụng các kiểu hợp nhất, giao thoa, chữ, null, undefined, never, và tùy chọn giúp bạn tối ưu hóa quy trình phát triển ứng dụng. Để tìm hiểu thêm về TypeScript, hãy tham khảo các bài học liên quan trên "codetuthub.com" như TypeScript Simple Types, TypeScript Functions, và TypeScript Interfaces.









