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:
T extends U ? X : YNế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:
type IsNumber<T> = T extends number ? true : false;
type A = IsNumber<number>; // true
type B = IsNumber<string>; // falseMẫ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:
type GetReturnType<T> = T extends (...args: any[]) => infer R ? R : never;
type ExampleFunction = () => string;
type Return = GetReturnType<ExampleFunction>; // stringTrong 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ạ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.
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
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.
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ử