Chuyển đến nội dung chính
Mô-đun 6 · Bài học 1 trong tổng số 211/14 trong khóa học~15 min
Bài học theo mô-đun (1/2)

Các loại có điều kiện và suy luận

Các loại có điều kiện cho phép bạn thể hiện các quyết định loại không tầm thường dựa trên các mối quan hệ kế thừa. Cú pháp giống với toán tử bậc ba của JavaScript:

TS
T extends U ? X : Y

Nếu loại T có thể gán cho U thì loại kết quả sẽ là X, nếu không thì loại đó sẽ là Y.


Các loại câu điều kiện cơ bản

Một loại điều kiện đánh giá một điều kiện tại thời điểm biên dịch:

TS
type IsNumber<T> = T extends number ? true : false;

type A = IsNumber<number>; // true
type B = IsNumber<string>; // false

Mẫu này cực kỳ mạnh mẽ khi kết hợp với generics để tạo ra các loại tiện ích linh hoạt và năng động.


Loại trích xuất bằng infer

Bên trong mệnh đề extends của một loại có điều kiện, chúng ta có thể sử dụng từ khóa infer để khai báo một biến loại được trình biên dịch suy ra.

Ví dụ: nếu chúng ta muốn trích xuất kiểu trả về của hàm:

TS
type GetReturnType<T> = T extends (...args: any[]) => infer R ? R : never;

type ExampleFunction = () => string;
type Return = GetReturnType<ExampleFunction>; // string

Trong ví dụ này, infer R yêu cầu TypeScript tự động xác định kiểu trả về của hàm và cung cấp kiểu đó dưới dạng R trong nhánh dương của điều kiện.


Hãy tự mình thử

Bài tập 1: Loại IsString

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

Tạo một kiểu chung có tên IsString<T> trả về kiểu chữ đúng nếu T mở rộng chuỗi, nếu không thì sai.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

Sử dụng kiểu cú pháp IsString<T> = T kéo dài chuỗi ? đúng: sai; để kiểm tra loại.

Giải pháp khả dụng sau 3 lần thử

Bài tập 2: Trích xuất một kiểu từ mảng bằng infer

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

Xác định kiểu chung UnpackArray<T> sử dụng suy luận để trích xuất kiểu phần tử của mảng T. Nếu T là một mảng (ví dụ U[]), trả về U, nếu không thì trả về cùng kiểu T.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

Sử dụng T mở rộng (suy ra U)[]? U : T để khai báo và trả về biến kiểu U được suy ra.

Giải pháp khả dụng sau 3 lần thử