Tôi đang sử dụng Joi để xác thực tải trọng của dịch vụ trong máy chủ node.js của tôi bằng cách sử dụng khung công tác hapijs. Nó được sử dụng để trông giống như thế này (trong mã số của tôi cũng như sau khi biên dịch sang javascript):Đặt giá trị mặc định của xác thực
payload: {
para1: Joi.number().required(),
para2: Joi.string()
}
Bây giờ tôi muốn đặt giá trị mặc định của hai tham số. Nếu mã được viết bằng javascript, tôi có thể thực hiện việc này:
payload: {
para1: Joi.number().required().default(1),
para2: Joi.string().default("defaultstring")
}
Tôi đã thử nghiệm nó theo dạng chuyển đổi và giá trị mặc định thực sự trở thành giá trị tôi đặt.
Tuy nhiên, dự án của tôi được viết bằng bản ghi. Tôi đã làm điều tương tự và biên dịch mã số. Kết quả javascript trông giống như sau:
payload: {
para1: Joi.number().required()["default"](1),
para2: Joi.string()["default"]("defaultstring")
}
Trong quá trình chuyển đổi, giá trị mặc định không được áp dụng.
Dưới đây là những câu hỏi của tôi:
- tại sao đoạn code trở nên khác nhau sau khi biên dịch?
["default"]("defaultstring")
có nghĩa là gì và nó hoạt động như thế nào?- làm thế nào tôi có thể viết mã typescript để chắc chắn rằng nó có thể biên soạn như
Joi.string().default("defaultstring")
Cập nhật
Theo bài @ RSP của, định dạng trong câu hỏi 2 chỉ là cách khác để truy cập tài sản của đối tượng. Tôi cũng nhận được tài liệu tham khảo từ here. Nhưng nó không giải thích nếu họ có bất kỳ sự khác biệt nào. Có ai có ý kiến gì không?
Update2
Here là sự khác biệt giữa hai cách truy cập thuộc tính JS. Có vẻ như không có hiệu ứng tiêu cực bằng cách sử dụng dấu ngoặc vuông. Tuy nhiên, trong trường hợp của tôi, các giá trị mặc định không được phản ánh trên vênh vang. Sẽ nghiên cứu về nó.
Cuối cùng đã tìm ra. Khi tôi sử dụng kiểu chữ, các ghi chú dao găm được tạo từ hàm ban đầu của kiểu chữ, không phải từ tệp JS. Không có vấn đề với chính mã. – zhangjinzhou