Đây là một ví dụ đơn giản hơn những gì tôi đang cố gắng để làm:Cách đúng để truyền một đối tượng JSON vào một biến kiểu đánh máy bằng cách sử dụng một lớp?
export class Person{
id:Number;
name:String;
}
export class PersonForm{
// This line:
default:Person = {name: "Guy"};
// Gives the following error:
// Error:(25, 5) TS2322: Type '{ name: string; }' is not assignable to type 'Person'.
// Property 'id' is missing in type '{ name: string; }'.
// I tried <Person>{name: "Guy"} but it gives the same error.
}
Làm thế nào tôi có thể làm cho trình biên dịch bỏ qua vấn đề này càng lâu càng Im không sử dụng bất động sản không còn tồn tại, hoặc làm thế nào để khai báo lớp vì vậy tôi có thể thực hiện nhiệm vụ theo cách này thay vì Person mới() và sau đó chỉ thiết lập các thuộc tính mà tôi muốn.
Lưu ý: Gửi một đối tượng có tất cả các thuộc tính vào hàm tạo không phải là giải pháp mà tôi mong đợi. Cũng sử dụng một giao diện hoạt động vì tôi có thể khai báo các trường tùy chọn, làm thế nào tôi có thể làm tương tự trong một lớp?
Thêm một số thông tin thêm:
Mục đích chính của những gì tôi đang cố gắng để đạt được:
Tìm cách tốt nhất để khai báo một lớp (không phải là một giao diện) vì vậy tôi có thể khởi tạo nó với mã sạch trong một dòng thiết lập chỉ các tham số tôi muốn thiết lập. Trong Java, bạn sẽ quá tải các nhà xây dựng hoặc sử dụng mẫu Builder.
Tôi chắc chắn có thể thử mẫu trình xây dựng nhưng tôi đang tìm cách tạo kiểu chữ hơn để làm điều đó, nếu có.
có gì sai với việc sử dụng một giao diện trong kịch bản này? Có vẻ như phù hợp nhất. – toskv
Tôi nghĩ rằng các tùy chọn của bạn là tạo một giao diện w/thuộc tính tùy chọn và yêu cầu lớp của bạn triển khai giao diện hoặc chấp nhận giao diện làm tham số hàm tạo. Tại thời điểm này, không có cách nào để làm những gì bạn muốn, nhưng [những người khác đã yêu cầu] (https://github.com/Microsoft/TypeScript/issues/4889) cho nó. –
cách khác bạn chỉ có thể tạo một hàm tạo cho lớp và gọi nó bằng tham số null .. giao diện sẽ vẫn tốt hơn cho trường hợp này. – toskv