Bài học theo mô-đun (1/2)
Hàm được gõ
Hàm là khối xây dựng cơ bản của bất kỳ ứng dụng JavaScript nào. Trong TypeScript, chúng ta có thể chú thích chính xác cả đối số đầu vào và giá trị trả về, làm cho giao diện và lệnh gọi hàm của chúng ta cực kỳ an toàn và tự ghi lại.
Thông số tùy chọn và mặc định
Trong JavaScript, mọi tham số đều là tùy chọn và mặc định là undefined nếu bị bỏ qua. Trong TypeScript, theo mặc định, mọi tham số được khai báo đều là bắt buộc.
Tuy nhiên, chúng ta có thể xác định các tham số tùy chọn bằng dấu chấm hỏi (?) hoặc chỉ định các giá trị mặc định trực tiếp trong chữ ký hàm.
1. Thông số tùy chọn
Các tham số tùy chọn phải được đặt sau tất cả các tham số bắt buộc:
function greetUser(name: string, title?: string): string {
if (title) {
return `Good morning ${title} ${name}`;
}
return `Hello ${name}`;
}2. Thông số mặc định
Nếu không có giá trị nào được cung cấp cho tham số có giá trị mặc định, TypeScript sẽ suy ra loại của nó và gán giá trị mặc định đã chỉ định:
function greetUserWithDefault(name: string, prefix: string = 'Hello'): string {
return `${prefix} ${name}`;
}Thông số nghỉ ngơi (...args)
Khi chúng ta muốn chấp nhận số lượng đối số thay đổi, chúng ta có thể sử dụng toán tử còn lại. Trong TypeScript, các tham số này phải được nhập dưới dạng mảng:
function sumAll(message: string, ...numbers: number[]): string {
const total = numbers.reduce((sum, n) => sum + n, 0);
return `${message} ${total}`;
}Các loại chức năng (Chữ ký cuộc gọi)
Chúng ta có thể định nghĩa kiểu của hàm một cách độc lập và sau đó sử dụng lại nó trong các khai báo biến hoặc đối số gọi lại:
// Define function type using type alias
type MathOperation = (a: number, b: number) => number;
const add: MathOperation = (x, y) => x + y;
const multiply: MathOperation = (x, y) => x * y;Cách tiếp cận này rất cần thiết khi truyền các hàm làm đối số cho các hàm khác (gọi lại).
Hãy tự mình thử
Bài tập 1: Tham số tùy chọn
Tạo một hàm có tên formatName chấp nhận tham số FirstName (chuỗi) và tham số LastName tùy chọn (chuỗi). Nếu họ được cung cấp, hãy trả về 'firstName LastName', nếu không thì chỉ trả về 'firstName'.
Hiển thị gợi ý
Hãy nhớ rằng tham số tùy chọn được khai báo bằng chuỗi LastName?: sau tham số bắt buộc.
Giải pháp khả dụng sau 3 lần thử
Bài tập 2: Tham số mặc định
Tạo một hàm có tên lũy thừa chấp nhận cơ số (số) và số mũ (số có giá trị mặc định là 2). Hàm phải tính toán và trả về giá trị cơ số được nâng lên số mũ (sử dụng Math.pow).
Hiển thị gợi ý
Sử dụng cơ sở: số và số mũ: số = 2 trong chữ ký hàm.
Giải pháp khả dụng sau 3 lần thử
Bài tập 3: Chữ ký hàm
Xác định bí danh loại có tên BinaryOp mô tả hàm chấp nhận hai tham số số và trả về một số. Tiếp theo, khai báo một tổng có tên không đổi thuộc loại BinaryOp thực hiện phép cộng.
Hiển thị gợi ý
Cú pháp của một loại hàm là (a: number, b: number) => number.
Giải pháp khả dụng sau 3 lần thử
Bài 4: Hàm gọi lại
Tạo một hàm có tên là processItems chấp nhận hai tham số: items (một mảng các chuỗi) và gọi lại (một hàm chấp nhận một chuỗi duy nhất và không trả về gì, tức là void). Hàm phải chạy vòng lặp for...of trên từng phần tử trong các mục và chuyển nó tới hàm gọi lại.
Hiển thị gợi ý
Khai báo chữ ký là processItems(items: string[], callback: (item: string) => void): void): void và sử dụng vòng lặp để gọi lại.
Giải pháp khả dụng sau 3 lần thử