我认为您基本上有五种不同的选择。根据您想要实现的目标,在其中进行选择可能很容易。
大多数情况下使用类并实例化它的最佳方式,因为您使用 TypeScript 来应用类型检查。
interface IModal {
content: string;
form: string;
//...
//Extra
foo: (bar: string): void;
}
class Modal implements IModal {
content: string;
form: string;
foo(param: string): void {
}
}
即使其他方法提供了从接口创建对象的更简单方法,您也应该考虑将接口分开,如果您将对象用于不同的事情,并且不会导致接口过度隔离:
interface IBehaviour {
//Extra
foo(param: string): void;
}
interface IModal extends IBehaviour{
content: string;
form: string;
//...
}
另一方面,例如在对代码进行单元测试期间(如果您可能不经常应用关注点分离),为了提高生产力,您可能能够接受这些缺点。您可以应用其他方法来创建主要用于大型第三方 *.d.ts 接口的模拟。总是为每个巨大的接口实现完全匿名的对象可能会很痛苦。
在此路径上,您的第一个选择是创建一个空对象:
var modal = <IModal>{};
其次要充分实现你界面的必修部分。无论您是否调用 3rd 方 JavaScript 库,这都会很有用,但我认为您应该创建一个类,就像以前一样:
var modal: IModal = {
content: '',
form: '',
//...
foo: (param: string): void => {
}
};
第三,您可以只创建界面的一部分并创建一个匿名对象,但这样您有责任履行合同。
var modal: IModal = <any>{
foo: (param: string): void => {
}
};
总结一下我的回答,即使接口是可选的,因为它们没有被转译成 JavaScript 代码,TypeScript 可以提供一个新的抽象级别,如果使用得当的话。我认为,仅仅因为您可以在大多数情况下从您自己的代码中忽略它们,您不应该这样做。