Giới thiệu về Kiểu dữ liệu Hàm trong TypeScript

TypeScript yêu cầu kiểu dữ liệu cho mọi thứ. Điều này bao gồm cả các hàm của bạn. Bạn phải định nghĩa kiểu cho đầu vào và đầu ra.

Cú pháp Hàm

Bạn định nghĩa các kiểu đầu vào và một kiểu đầu ra như sau:

function add(x: number, y: number): number {
  return x + y;
}

TypeScript cũng sử dụng cơ chế suy luận kiểu (type inference). Bạn không phải lúc nào cũng cần viết kiểu đầu ra. Trình biên dịch sẽ tự tìm thấy nó cho bạn.

Nếu hàm của bạn trả về các kiểu dữ liệu khác nhau, TypeScript sẽ xử lý việc đó. Ví dụ, nếu một hàm trả về một số hoặc một chuỗi, trình biên dịch sẽ nhận diện được cả hai.

Các kiểu trả về đặc biệt

  • void: Sử dụng khi một hàm không trả về gì cả.
  • never: Sử dụng khi một hàm ném ra một lỗi hoặc dừng chương trình.

Tham số

Bạn có thể biến các tham số thành tùy chọn bằng cách sử dụng dấu chấm hỏi.

function makeProfile(name: string, age: number, url?: string) {
  // code
}

Bạn cũng có thể sử dụng các giá trị mặc định. Điều này giúp một tham số trở thành tùy chọn mà không cần các ký hiệu đặc biệt.

function makeProfile(name: string, age: number, url: string = "www.example.com") {
  return name + " visits " + url;
}

Hàm Callback

Hàm là các giá trị. Bạn có thể truyền chúng dưới dạng đối số. Để định nghĩa một kiểu callback, hãy sử dụng cú pháp này:

function makePage(func: (n: string, a: number, u?: string) => string, param1: string, param2: number) {
  func(param1, param2);
}

Tên của các tham số trong callback không quan trọng. Chỉ có kiểu dữ liệu mới quan trọng.

Mảng các Hàm

Nếu bạn cần một danh sách các hàm, hãy định nghĩa chúng dưới dạng một mảng của kiểu hàm đó.

function applyMath(funcs: ((a: number, b: number) => number)[], x: number, y: number) {
  // code
}

Tham số Rest

Sử dụng toán tử spread để chấp nhận bất kỳ số lượng đối số nào. Điều này sẽ lưu trữ tất cả các đầu vào trong một mảng.

function sum(...numbers: number[]) {
  // code
}

sum(1, 2, 3);

Nguồn: https://dev.to/jsha/introduction-to-typescript-function-types-hin