Nạp chồng hàm trong TypeScript
Đôi khi chúng ta gặp các hàm trả về các giá trị mà kiểu của chúng phụ thuộc vào các tham số được truyền vào. Để làm điều này trong TypeScript, người ta sử dụng nạp chồng hàm. Nó cho phép chỉ định các biến thể chữ ký hàm khác nhau.
Hãy xem xét một ví dụ. Giả sử chúng ta có một hàm phân tách các ký tự của một chuỗi thành một mảng các chữ cái:
function splitStr(str: string): string[] {
return str.split('');
}
Giả sử chúng ta cũng có một hàm phân tách các chữ số của một số thành một mảng:
function splitNum(num: number): number[] {
let str: string = String(num);
let arr: string[] = str.split('');
return arr.map(elem => +elem);
}
Hãy kết hợp cả hai hàm thành một. Hàm mới tùy thuộc vào kiểu của tham số phải trả về hoặc một mảng số hoặc một mảng chuỗi.
Hãy sử dụng nạp chồng để khai báo các chữ ký khác nhau cho hàm của chúng ta:
function splitVal(val: number): number[];
function splitVal(val: string): string[] {
// triển khai cho cả hai chữ ký
}
Bây giờ hãy viết phần triển khai hàm. Trong mã của nó, chúng ta phải xác định bằng điều kiện xem chữ ký nào của hàm đã được kích hoạt, và tùy thuộc vào đó để chạy mã phù hợp với kết quả của kiểu cần thiết:
function splitVal(val: number): number[];
function splitVal(val: string): string[] {
if (typeof val === 'string') {
return val.split('');
} else {
let str: string = String(val);
let arr: string[] = str.split('');
return arr.map((elem: string): number => +elem);
}
}
Không giống như các ngôn ngữ khác, trong TypeScript việc nạp chồng tạo ra một hàm duy nhất. Không thể tạo nhiều hàm với một tên, nhưng có các chữ ký khác nhau.
Viết một hàm sẽ trả về hoặc thay đổi văn bản của phần tử DOM. Nó phải hoạt động như sau:
text('#elem', 'text'); // đặt văn bản
text('#elem'); // trả về văn bản hiện tại