Recursive conditional types là kiểu điều kiện tự gọi lại chính nó, cho phép duyệt qua các nested types ở mọi cấp độ, ví dụ: type DeepPartial<T> = T extends object ? { [K in keyof T]?: DeepPartial<T[K]> } : T sẽ biến tất cả properties thành optional ở mọi tầng lồng nhau.
- TypeScript giới hạn độ sâu đệ quy (thường khoảng 50 levels) để tránh infinite loop trong quá trình type checking.
- Kỹ thuật này rất hữu ích để xây dựng các utility types phức tạp như DeepReadonly, DeepRequired, hay Flatten để biến đổi cấu trúc dữ liệu lồng nhau một cách type-safe.