- vừa được xem lúc

Sử dụng Generics trong TypeScript

0 0 21

Người đăng: Gấu con

Theo Viblo Asia

Giới thiệu về Generics trong TypeScript

Sử dụng generics trong TypeScript cho phép bạn viết các hàm, class, interfaces có thể tái sử dụng và tổng quát hóa.
Ví dụ, bạn cần tạo một hàm, cái trả về ngẫu nhiên một phần tử trong một mảng các numbers.

function getRandomNumberElement(items: number[]): number { let randomIndex = Math.floor(Math.random() * items.length); return items[randomIndex];
}
let numbers = [1, 5, 7, 4, 2, 9];
console.log(getRandomNumberElement(numbers));

Giả sử, bạn cần lấy một phần tử ngẫu nhiên của một mảng của strings. Lần này, bạn có thể nghĩ ra một chức năng mới như dưới:

function getRandomStringElement(items: string[]): string { let randomIndex = Math.floor(Math.random() * items.length); return items[randomIndex];
} let colors = ['red', 'green', 'blue'];
console.log(getRandomStringElement(colors));

Sau đó, bạn lại cần lấy một phần tử ngẫu nhiên trong một mảng đối tượng. Việc tạo một hàm mới mỗi khi bạn muốn lấy một phần tử ngẫu nhiên từ một kiểu mảng mới là không thể mở rộng.

Sử dụng kiểu any

Một giải pháp cho vấn đề ở trên là set loại của mảng các đối số là kiểu any[]. Bằng cách này, bạn chỉ cần viết một hàm hoạt động với mảng thuộc bất kỳ kiểu dữ liệu nào.

function getRandomAnyElement(items: any[]): any { let randomIndex = Math.floor(Math.random() * items.length); return items[randomIndex];
}

Bầy giờ hàm getRandomAnyElement() có thể làm việc với một mảng của bất kỳ loại nào như numbers, strings, objects, etc..

let numbers = [1, 5, 7, 4, 2, 9];
let colors = ['red', 'green', 'blue']; console.log(getRandomAnyElement(numbers));
console.log(getRandomAnyElement(colors));

Giải pháp này hoạt động tốt, tuy nhiên, nó có một lỗ hổng.
Nó không cho phép bạn thực thi kiểu của phần tử trả về. Nói cách khác, nó không an toàn về kiểu.
Một giải pháp tốt hơn để tránh trùng lặp mã trong khi vẫn bảo toàn kiểu là sử dụng generic.

Sử dụng generics

Ví dụ bên dưới hiển thị một hàm generic, cái trả về một phần tử ngẫu nhiên từ một mảng với loại T :

function getRandomElement<T>(items: T[]): T { let randomIndex = Math.floor(Math.random() * items.length); return items[randomIndex];
}

Hàm này sử dụng biến T. Biến T cho phép bạn nắm bắt kiểu được cung cấp tại thời điểm gọi hàm. Ngoài ra, hàm sử dụng biến kiểu T làm kiểu trả về của nó.
Hàm getRandomElement() này là generic vì nó có thể hoạt động với bất kỳ kiểu dữ liệu nào bao gồm string, number, objects,…
Theo quy ước, chúng ta sử dụng chữ T làm kiểu biến, tuy nhiên, bạn có thể thoải mái sử dụng các chữ cái khác như A, B C,…

Gọi hàm generic

Sau đây là cách sử dụng getRandomElement() với một mảng của numbers:

let numbers = [1, 5, 7, 4, 2, 9];
let randomEle = getRandomElement<number>(numbers); console.log(randomEle);

Ví dụ này, khi chúng ta truyền biến number vào code như trên, biến T trong hàm getRandomElement() bây giờ sẽ được hiểu là kiểu number.

Tương tự, sử dụng getRandomElement() với một mảng của strings:

let numbers = ['1', '5', '7', '4', '2', '9'];
let randomEle = getRandomElement<string>(numbers); console.log(randomEle);

Sử dụng generic với multiple types

Sau đây minh họa cách phát triển một hàm tổng quát với hai biến kiểu U và V:

function merge<U, V>(obj1: U, obj2: V) { return { ...obj1, ...obj2 };
} let result = merge( { name: 'John' }, { jobTitle: 'Frontend Developer' }
); console.log(result);

Output:

{ name: 'John', jobTitle: 'Frontend Developer' }

Tóm tắt:

  • Sử dụng generics trong TypeScript để phát triển các hàm, giao diện và lớp có thể tái sử dụng, tổng quát và an toàn cho kiểu.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Giới thiệu Typescript - Sự khác nhau giữa Typescript và Javascript

Typescript là gì. TypeScript là một ngôn ngữ giúp cung cấp quy mô lớn hơn so với JavaScript.

0 0 500

- vừa được xem lúc

Type annotation vs Type Inference - Typescript

Trong bài viết này, chúng ta sẽ tìm hiểu kỹ về TypeScript bằng cách tìm hiểu sự khác biệt giữa kiểu chú thích và kiểu suy luận. Tôi sẽ cho rằng bạn có một số kinh nghiệm về JavaScript và biết về các kiểu cơ bản, như chuỗi, số và boolean.

0 0 32

- vừa được xem lúc

Type Annotation và Type Inference trong TypeScript là gì?

Khi làm việc với javascript chắc hẳn các bạn đã quá quen với việc dùng biến mà không cần phải quan tâm đến kiểu dữ liệu của nó là gì phải không? Đúng là mới đầu tiếp cận với Typescript mình cũng cảm thấy nó khá là phiền vì cần phải khai báo đủ type để nó chặt chẽ hơn. Lúc đó mình còn nghĩ: " JavaScr

0 0 25

- vừa được xem lúc

Tìm hiểu TypeScript và kiến thức cơ bản

TypeScript là gì. TypeScript sử dụng tất cả các tính năng của của ECMAScript 2015 (ES6) như classes, modules.

0 0 35

- vừa được xem lúc

TypeScript - P1: Vì sao TypeScript được yêu thích đến vậy?

Trải nghiệm thực tế. Trước khi là một Web Developer, tôi là một Mobile Developer và Java là thứ mà tôi từng theo đuổi.

0 1 58

- vừa được xem lúc

4 Tính năng rất hay từ TypeScript

Xin chào các bạn hôm nay mình xin chia sẽ những tính năng rất hay của TypeScript (TS), các bạn cùng tìm hiểu nhé. Ngoài việc set Type cho biến, tham số hay function thì ví dụ khi bạn nhìn vào một tham

0 0 82