Tôi sử dụng phiên bản TypeScript 2.3.4. Tôi muốn viết một hàm chấp nhận một đối tượng phải có các trường được chỉ định. Nhưng đối tượng này không nên chứa bất kỳ trường nào khác. Làm thế nào tôi có thể đạt được điều này?Lớp/giao diện nghiêm ngặt của TypeScript
Hiện tại, tính năng này chỉ hoạt động nếu tôi xác định nội tuyến đối tượng. Nhưng nếu tôi sử dụng một đối tượng khác với các trường thừa - trình biên dịch sẽ cho phép nó. Điều gì là hoàn toàn sai.
Ví dụ:
function foo(arg: { a: string }) { // there is tons of fields actually
// ...
}
foo ({a: "qwerty"}); // No Error - ok
foo ({a: "qwerty", b: 123}); // Error - ok
let bar = {
a: "qwerty",
b: 123
};
foo (bar); // No Error - NOT OK !!!
Mã tương tự có thể được lớn không lành mạnh với giao diện, các lớp học, tờ khai loại - đó là cùng một vấn đề.
Bây giờ tôi phải trích xuất các trường từ đối tượng theo cách thủ công để đảm bảo rằng không có trường bổ sung nào. Nhưng tôi không thể phát tán giải pháp này trên ~ 1000 chức năng (tôi thực sự cần điều này) trên tất cả các mã - nó quá lộn xộn. Tôi tạo trình bao bọc API và tôi cần đảm bảo rằng không có trường bổ sung hoặc sai nào được truyền cho máy chủ.
Có vẻ như đó là cố ý. Xem [vấn đề này] (https://github.com/Microsoft/TypeScript/issues/13444) và [this] (https://github.com/Microsoft/TypeScript/issues/3755) để thảo luận thêm. – Saravana
Saravana, vâng, tôi đọc điều này, nhưng không có câu trả lời cho câu hỏi của tôi trong các cuộc thảo luận. Tôi nghĩ sẽ tốt hơn nếu bạn tránh sự khắt khe của các giao diện, nhưng hãy để nó cho các lớp học. –