</>
⌕
Senior #conditional-types#infer#distributive#advanced-types

Conditional types và infer hoạt động thế nào? Distributive conditional type là gì?

⚡ Trả lời nhanh

`T extends U ? X : Y` chọn type theo điều kiện; `infer R` trong nhánh `extends` trích một type con (như phần tử mảng, kiểu trả về). Khi T là type tham số trần và nhận union thì điều kiện phân phối (distributive) lên từng thành viên; bọc `[T]` để tắt hành vi đó.

Ví dụ

main.ts · sửa được
  • infer chỉ dùng được trong mệnh đề extends của conditional type. Có thể suy luận nhiều vị trí, ví dụ T extends (...args: infer A) => infer R.
  • ReturnType, Parameters, Awaited, Exclude, Extract đều là conditional type.
  • Exclude<T, U> = T extends U ? never : T hoạt động nhờ distribution: never biến mất khỏi union.
  • Đệ quy conditional type (như Unwrap) có giới hạn độ sâu; TS có tail-recursion optimization cho dạng cụ thể.
🃏 Ôn bằng flashcard