Tôi nghĩ rằng về cơ bản bạn có năm lựa chọn khác nhau để làm như vậy. Lựa chọn trong số họ có thể dễ dàng tùy thuộc vào mục tiêu bạn muốn đạt được.
Cách tốt nhất trong hầu hết các trường hợp để sử dụng một lớp và khởi tạo nó , bởi vì bạn đang sử dụng TypeScript để áp dụng kiểm tra kiểu.
interface IModal {
content: string;
form: string;
//...
//Extra
foo: (bar: string): void;
}
class Modal implements IModal {
content: string;
form: string;
foo(param: string): void {
}
}
Ngay cả khi các phương pháp khác đang cung cấp các cách dễ dàng hơn để tạo một đối tượng từ một giao diện, bạn nên xem xét tách giao diện của mình ra, nếu bạn đang sử dụng đối tượng của mình cho các vấn đề khác nhau và nó không gây ra sự phân tách quá mức về giao diện:
interface IBehaviour {
//Extra
foo(param: string): void;
}
interface IModal extends IBehaviour{
content: string;
form: string;
//...
}
Mặt khác, ví dụ trong quá trình kiểm tra đơn vị mã của bạn (nếu bạn không thể áp dụng phân tách mối quan tâm thường xuyên), bạn có thể chấp nhận những hạn chế vì lợi ích của năng suất. Bạn có thể áp dụng các phương pháp khác để tạo giả chủ yếu cho các giao diện * .d.ts của bên thứ ba lớn. Và nó có thể là một nỗi đau khi luôn luôn thực hiện đầy đủ các đối tượng ẩn danh cho mọi giao diện lớn.
Trên đường dẫn này, tùy chọn đầu tiên của bạn là tạo một đối tượng trống :
var modal = <IModal>{};
Thứ hai để nhận ra đầy đủ các phần bắt buộc trong giao diện của bạn . Nó có thể hữu ích cho dù bạn đang gọi các thư viện JavaScript của bên thứ 3, nhưng tôi nghĩ bạn nên tạo một lớp thay thế, như trước đây:
var modal: IModal = {
content: '',
form: '',
//...
foo: (param: string): void => {
}
};
Thứ ba, bạn có thể tạo chỉ một phần của giao diện của mình và tạo một đối tượng ẩn danh , nhưng theo cách này, bạn có trách nhiệm thực hiện hợp đồng
var modal: IModal = <any>{
foo: (param: string): void => {
}
};
Tóm tắt câu trả lời của tôi ngay cả khi các giao diện là tùy chọn, vì chúng không được dịch mã JavaScript, TypeScript có sẵn để cung cấp một mức độ trừu tượng mới, nếu được sử dụng một cách khôn ngoan và nhất quán. Tôi nghĩ, chỉ vì bạn có thể loại bỏ chúng trong hầu hết các trường hợp từ mã của riêng bạn mà bạn không nên.