在 TypeScript 中,接口(Interface)和类(Class)确实在某些方面有相似之处,但它们的用途和目的有所不同。这就是为什么即使类可以用作类型,你仍然可能想要使用接口的原因。
接口在 TypeScript 中主要用于定义对象的形状,即对象应该具有哪些属性和方法。接口不能包含实现,只能包含声明。这意味着你不能在接口中初始化属性或定义方法的具体实现。接口的主要目的是提供一种方式来强制实施代码中的某种约定或契约。
类则不同,类是一种面向对象编程的构造,它可以包含属性和方法的声明以及实现。类可以用于创建对象实例,并为这些实例分配初始值。此外,类还可以实现接口,这意味着类必须满足接口中定义的所有属性和方法。
回到你的问题,为什么你不使用类来定义并初始化值,而是使用接口:
- 明确性:接口提供了一种明确的方式来定义对象应该具有哪些属性和方法,而不涉及任何实现细节。这使得其他开发人员可以清楚地了解他们应该如何与你的代码交互,而无需查看类的实现。
- 多重继承:在 TypeScript 中,类只能继承自一个父类,但可以实现多个接口。这允许你组合多个接口来创建一个类,从而满足多个契约。
- 灵活性:使用接口,你可以定义对象的形状,而不必关心对象是如何创建的。这意味着你可以使用任何满足接口的对象,无论它是通过类实例化还是通过其他方式创建的。
在你的示例中,你使用类 Options
和 Options2
来定义对象的形状,并为它们分配了初始值。这是完全可以的,并且在某些情况下可能是合适的。但是,如果你想要定义一个更通用的契约,或者想要允许其他开发人员以不同的方式实现该契约,那么使用接口可能更为合适。
总的来说,选择使用接口还是类取决于你的具体需求。在某些情况下,使用类来定义并初始化值可能更为方便;而在其他情况下,使用接口可能更为合适,因为它提供了更明确的契约和更大的灵活性。
跟编译和性能有关 class会保留 interface不会
看一篇文章吧 https://zhuanlan.zhihu.com/p/62443803