Generics Cơ Bản

Nguyen Hoang - Aug 22 - - Dev Community

Generics Cơ Bản

  1. Hàm Generics

Hàm generics cho phép bạn định nghĩa một hàm mà kiểu của tham số và kiểu trả về không được chỉ định cụ thể. Thay vào đó, bạn sử dụng một tham số kiểu (type parameter) để đại diện cho kiểu đó.

Ví dụ: Hàm Identity

typescript
Copy code
function identity(arg: T): T {
return arg;
}
: Đây là tham số kiểu (type parameter). T có thể là bất kỳ kiểu nào, và TypeScript sẽ xác định nó khi bạn gọi hàm.
arg: T: Tham số đầu vào của hàm có kiểu T.
T: Kiểu trả về của hàm cũng là T.
Sử Dụng Hàm Generics

typescript
Copy code
let result1 = identity('Hello, TypeScript'); // result1 có kiểu string
let result2 = identity(42); // result2 có kiểu number
Trong ví dụ trên, identity sẽ khiến TypeScript xác định T là string, vì vậy hàm sẽ nhận và trả về một giá trị kiểu string.
Tương tự, identity sẽ nhận và trả về một giá trị kiểu number.
Generics với Lớp (Class)
Generics cũng có thể được sử dụng trong các lớp để tạo các lớp có thể hoạt động với nhiều kiểu dữ liệu khác nhau mà không cần phải tạo nhiều lớp khác nhau.

Ví dụ: Lớp Box Generics

typescript
Copy code
class Box {
private value: T;

constructor(value: T) {
this.value = value;
}

getValue(): T {
return this.value;
}
}
Box: Đây là một lớp generics với tham số kiểu T.
private value: T: Thuộc tính value của lớp có kiểu T.
getValue(): T: Phương thức getValue trả về giá trị của thuộc tính value, có kiểu T.
Sử Dụng Lớp Generics

typescript
Copy code
let stringBox = new Box('Hello, TypeScript');
console.log(stringBox.getValue()); // In ra: Hello, TypeScript

let numberBox = new Box(123);
console.log(numberBox.getValue()); // In ra: 123
Generics với Giao Diện (Interface)
Generics có thể được sử dụng trong giao diện để định nghĩa các cấu trúc dữ liệu linh hoạt.

Ví dụ: Giao Diện Pair Generics

typescript
Copy code
interface Pair {
first: T;
second: U;
}

let pair: Pair = { first: 'TypeScript', second: 2024 };
console.log(pair); // In ra: { first: 'TypeScript', second: 2024 }
Pair: Giao diện generics với hai tham số kiểu T và U.
first: T và second: U: Các thuộc tính có kiểu T và U tương ứng.
Constraints (Ràng Buộc) Trong Generics
Bạn có thể đặt ràng buộc cho tham số kiểu để đảm bảo rằng kiểu dữ liệu truyền vào phải đáp ứng các yêu cầu nhất định.

Ví dụ: Ràng Buộc Generics

typescript
Copy code
interface Lengthwise {
length: number;
}

function logLength(arg: T): void {
console.log(arg.length);
}
T extends Lengthwise: Ràng buộc kiểu T phải có thuộc tính length kiểu number.
Sử Dụng Ràng Buộc

typescript
Copy code
logLength('Hello, TypeScript'); // In ra: 18
logLength([1, 2, 3]); // In ra: 3

// logLength(42); // Sẽ lỗi, vì số không có thuộc tính length
Tóm Tắt
Generics giúp viết mã linh hoạt và tái sử dụng bằng cách cho phép bạn sử dụng các tham số kiểu.
Hàm Generics cho phép bạn định nghĩa hàm có thể hoạt động với nhiều kiểu dữ liệu khác nhau.
Lớp Generics cho phép bạn định nghĩa các lớp hoạt động với nhiều kiểu dữ liệu.
Giao Diện Generics giúp định nghĩa cấu trúc dữ liệu linh hoạt.
Ràng Buộc Generics đảm bảo rằng các kiểu dữ liệu truyền vào phải đáp ứng các yêu cầu nhất định.
Hi vọng rằng các ví dụ trên giúp bạn hiểu rõ hơn về cách sử dụng Generics trong TypeScript!

. . . . . . . . . . . . . . . . . . . . . . .
Terabox Video Player