Đó là telescoping constructor — người đọc không biết true ở vị trí thứ 6 nghĩa là gì, và hoán đổi hai tham số cùng kiểu thì compiler không bắt được. Hai hướng:
1. Object tham số (đủ dùng cho phần lớn trường hợp trong TS/JS):
ts
new Report({ from, to, includeDraft: true, format: 'pdf' })Tên field làm rõ nghĩa, optional bỏ hẳn thay vì truyền null.
2. Builder — khi việc tạo object gồm nhiều bước có thứ tự hoặc cần validate trước khi trả về instance:
ts
const query = new QueryBuilder()
.from('orders')
.where('status', 'paid')
.orderBy('created_at')
.build() // validate rồi mới tạo object bất biếnbuild() là nơi kiểm tra tổ hợp tham số hợp lệ, nên object sinh ra luôn ở trạng thái đúng.
Chọn cái nào: cấu hình phẳng, tạo một phát → object tham số. Dựng dần qua nhiều bước, hoặc cần nhiều biến thể từ cùng một quy trình → Builder.