Typescript中的接口和类之间的区别

Emre Ozturk:

Typescript接口和类之间有什么区别?什么时候使用班级?什么时候使用接口?它们的优点是什么?

我需要为后端服务器的HTTP请求创建某种类型的内容(使用Angular 2进行此操作),例如:},

"fields": {
  "project": {
      "id": "10000"
  },
  "summary": "something's wrong",
  "issuetype": {
      "id": "10000"
  },
  "assignee": {             // not neccesary required
      "name": "homer"
  },
  "reporter": {
      "name": "smithers"
  },
  "priority": {            // not neccesary required
      "id": "20000"
  }
}

我应该使用什么来构建这些模型?谢谢!

杰里米:

2019:差异和用法更新

首先,有一个明显的区别:语法这是一个简单但需要理解的区别:接口属性可以以逗号或分号结尾,而类属性只能以分号结尾。现在有趣的东西。关于何时使用和不使用的部分可能是主观的-这些是我为团队成员提供的准则,但是出于有效的原因,其他团队也可能会有其他准则。如果您的团队有其他不同的想法,请随时发表评论,我很想知道为什么。

接口:允许定义在设计和编译期间用于强类型化的类型。它们可以“实现”或“扩展”,但不能实例化(您不能new这样做)。在向下编译为JS时它们会被删除,因此它们不占用空间,但是在运行时也无法对其进行类型检查,因此您无法检查变量是否在运行时实现了特定类型(例如foo instanceof bar),除非检查其属性。具有:使用Typescript进行接口类型检查

何时使用接口:当需要为对象创建属性和函数的协定时,可以使用它们,这些约定将在代码中的多个地方使用,尤其是在多个文件或函数中。此外,当您希望其他对象开始的这组基本特性,如具有的使用Vehicle接口,多个类实现具体类型的车辆,如CarTruckBoat(例如class Car implements Vehicle)。

何时不使用接口:当您想要具有默认值,实现,构造函数或函数(而不仅仅是签名)时。

:还允许定义一种类型,该类型将在设计和编译时用于强类型化,并且可以在运行时使用。这也意味着代码没有被编译出来,因此会占用空间。这是@Sakuto提到的一个关键区别,但它的含义不只是空间。这意味着可以对类进行类型检查,即使在已转译的JS代码中也可以保留对“它们是谁”的理解。进一步的区别包括:类可以使用实例化new,可以扩展,但不能实现。类可以具有构造函数和实际功能代码以及默认值。

何时使用类:当您要创建其中包含实际功能代码的对象时,请使用构造函数进行初始化,和/或使用来创建其实例new另外,对于简单的数据对象,您可以使用类来设置默认值。另一个您想使用它们的时间是在进行类型检查时,但是如果需要,可以使用一些接口的解决方法(请参阅接口部分的OS链接)。

什么时候不使用类:当您有一个简单的数据接口时,不需要实例化它;当您希望由其他对象实现它时;当您只需将接口放在现有对象上时(请考虑类型定义文件)或占用空间过大或不必要的情况。附带说明一下,如果您查看.d.ts文件,您会发现它们仅使用接口和类型,因此在转换为TS时将完全删除该接口和类型。

最后要注意的是,除了类和接口之外,还有其他两个选项,第一个是称为“类型”的东西,它与接口非常相似,但请查看此SO帖子,特别是2019 Update答案:Typescript:Interfaces vs Types最后一个选择是使用TS进行函数式编程(不是OOP)。

有关示例的完整故事,请访问PassionForDev.com,有关示例与继承的更多关于类与继承的良好阅读,请访问https://jameshenry.blog/typescript-classes-vs-interfaces/

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Python中抽象类和接口之间的区别

TypeScript中扩展和相交接口之间的区别?

TypeScript中的“声明类”和“接口”有什么区别

Typescript中的类和名称空间之间的区别

Java 8中抽象类和接口之间有什么区别?

就抽象类和接口在JVM中的存储而言,它们之间有何区别?

Objective-C中抽象类和接口之间的区别

Java 8 及更高版本中的抽象类和接口之间有什么区别?

接口和Java 8中抽象类之间的根本区别

如何检测接口和抽象类之间的区别?

接口和抽象类之间有什么区别?

纯抽象类和接口之间的区别

JVM在接口和纯抽象类之间的实现区别?

C#接口和Haskell类型类之间的区别

ZeroC ICE:接口和类之间有什么区别?

Typescript接口声明中命名函数语法之间的区别

Scala中对象和类之间的区别

Java和JavaScript中的类之间的区别?

Python中模块和类之间的区别

TypeScript中'object'和{}之间的区别

'object' 、{} 和 TypeScript 中的 Object 之间的区别

“接口”和“声明接口”之间的区别

Java中Runnable和Callable接口之间的区别

接口Object(){}和@implementation对象@end中的变量之间的区别

在Typescript中,类型和接口有什么区别?

普通接口类和仅具有抽象方法的抽象类之间是否有区别?

基于接口和类的匿名类之间有什么区别

java中的GregorianCalendar类和Calendar类之间的区别?

接口和类之间的转换