当前位置: 首页 > 知识库问答 >
问题:

javascript - typescript 接口不能初始化赋值,为什么我不用class 定义接口?

华哲茂
2024-04-30

总所周知,class 也可以当类型用.
那么为啥我不用class 定义接口,并且还能赋予初值

class Options {  path: string = "";}// class 也可以 implements class 的class Options2 implements Options {  path: string;  other: string;}// 函数在调用的时候可以直接实例化初始化参数function doo(options: Options = new Options()) {}

共有3个答案

储国发
2024-04-30

编译后TS会被移除,而class会被保留,增加体积,而且只是类型声明,用一个没有其他用处的class思来想去也是浪费

庞意智
2024-04-30

跟编译和性能有关 class会保留 interface不会
看一篇文章吧 https://zhuanlan.zhihu.com/p/62443803

谭仰岳
2024-04-30

在 TypeScript 中,接口(Interface)和类(Class)确实在某些方面有相似之处,但它们的用途和目的有所不同。这就是为什么即使类可以用作类型,你仍然可能想要使用接口的原因。

接口在 TypeScript 中主要用于定义对象的形状,即对象应该具有哪些属性和方法。接口不能包含实现,只能包含声明。这意味着你不能在接口中初始化属性或定义方法的具体实现。接口的主要目的是提供一种方式来强制实施代码中的某种约定或契约。

类则不同,类是一种面向对象编程的构造,它可以包含属性和方法的声明以及实现。类可以用于创建对象实例,并为这些实例分配初始值。此外,类还可以实现接口,这意味着类必须满足接口中定义的所有属性和方法。

回到你的问题,为什么你不使用类来定义并初始化值,而是使用接口:

  1. 明确性:接口提供了一种明确的方式来定义对象应该具有哪些属性和方法,而不涉及任何实现细节。这使得其他开发人员可以清楚地了解他们应该如何与你的代码交互,而无需查看类的实现。
  2. 多重继承:在 TypeScript 中,类只能继承自一个父类,但可以实现多个接口。这允许你组合多个接口来创建一个类,从而满足多个契约。
  3. 灵活性:使用接口,你可以定义对象的形状,而不必关心对象是如何创建的。这意味着你可以使用任何满足接口的对象,无论它是通过类实例化还是通过其他方式创建的。

在你的示例中,你使用类 OptionsOptions2 来定义对象的形状,并为它们分配了初始值。这是完全可以的,并且在某些情况下可能是合适的。但是,如果你想要定义一个更通用的契约,或者想要允许其他开发人员以不同的方式实现该契约,那么使用接口可能更为合适。

总的来说,选择使用接口还是类取决于你的具体需求。在某些情况下,使用类来定义并初始化值可能更为方便;而在其他情况下,使用接口可能更为合适,因为它提供了更明确的契约和更大的灵活性。

 类似资料:
  • 我遇到了一个有趣的问题,我不明白发生了什么: 据我所知,我提供的单个整数参数可以解释为使用参数调用构造函数,也可以解释为使用初始化列表的构造函数。似乎只有当我提供左值时才调用initialiser_list构造函数,但当我提供r-value(至少是文字)时,构造函数。为什么会这样? 这也意味着: 结果仅为大小为1的向量; 结果是一个大小为num\u元素的向量,但我认为应该避免这种初始化,因为偶尔会

  • 问题内容: 在当前的问题中(我将文件打印到Java中的物理打印机),我一直在疯狂地遍历代码,试图从所使用的每个类的javadoc中吞噬所有有用的丢失信息。 现在,我从以前的问题中抽出了很多代码,所以有相当一部分我不是自己写的。我注意到的问题是,我抓取的代码正在初始化一个对象,例如实现接口(Doc)的“SimpleDoc”并将其分配给该接口? 小代码段: 现在,据我所知,我们创建了对象。我熟悉继承,

  • 我和同事一起创建了一个Angular 5应用程序。我为我的所有界面创建了一个文件夹,并按功能进行分组。然而,我没有在它们上包含任何导出符号,并且在使用它们时,我从不需要导入它们……它们只存在,不会产生任何编译错误。我喜欢这种方式,因为它使代码更干净,但我只是在利用一些bug吗?我的同事以“正确”的方式完成了它,并且需要在任何时候导入他想要使用的界面。有什么想法吗?您应该如何创建存在于单独文件中的接

  • 说明 用于初始化接口类型、协议,验证接口密钥 请求地址 http://api.dc78.cn/Api/sys_init 请求方式 GET 请求参数 参数 参数名称 必填 描述 范例 protocal 接口协议类型 否 用于声明接口使用的协议类型 mqtt type 客户端接口 否 用于说明客户端接口的类型 api 接口协议目前支持两种:mqtt、http。设置相应类型后,平台端将以此协议与客户端进

  • 我想存储一组/值,但是s不一定是增量的,这意味着数据可以是: 因此,我试图创建一个c#等价的