Chuyển đến nội dung chính
Mô-đun 3 · Bài học 1 trong tổng số 25/14 trong khóa học~12 min
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:

TS
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:

TS
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:

TS
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:

TS
// 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ập thể dục#ts.m3.l1.e1
Nỗ lực: 0Đang tải…

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'.

Đang tải trình chỉnh sửa…
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ập thể dục#ts.m3.l1.e2
Nỗ lực: 0Đang tải…

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).

Đang tải trình chỉnh sửa…
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

tập thể dục#ts.m3.l1.e3
Nỗ lực: 0Đang tải…

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.

Đang tải trình chỉnh sửa…
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ập thể dục#ts.m3.l1.e4
Nỗ lực: 0Đang tả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.

Đang tải trình chỉnh sửa…
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ử