在Typescript中使用接口或类时

Jos*_*una 30 interface class strong-typing web typescript

我有一个简单的登录方案,要求用户在Typescript中输入电子邮件和密码.我需要创建一些类型来获得强类型并将其发送到后端.

应该写成:

export interface UserLogin {
  email: string;
  password: string;
}
//OR
export class UserLogin {
  email: string;
  password: string;
}
Run Code Online (Sandbox Code Playgroud)

以及如何知道何时使用这些方案?

ale*_*erd 32

在最基本的情况下,本质上是一个对象工厂(即一个对象应该看起来然后实现的蓝图),而接口是一个仅用于类型检查的结构.

虽然可能具有初始化的属性和方法来帮助创建对象,但是接口实际上定义了对象可以具有的属性和类型.

在您描述的场景中,可以使用界面为UserLogin设置类型.

  • 这是公认的答案,也是每个人都说的,但是为什么除了扩展实现它们的类之外,在任何地方都使用接口呢?为什么我们被允许(实际上是鼓励)“从接口实例化一个对象”,比如 `foo = {} as IModel` ? (4认同)

Yak*_*ain 14

如果只需要声明自定义类型,则使用接口。IMO,这是一个非常务实的原因-它们不会被翻译成JavaScript,因此生成的代码更短。

如果您需要使用构造函数实例化对象或使用实例化并注入它们的框架,则接口将无法工作。然后使用类或抽象类。


art*_*tem 6

发送到后端

通过网络发送类需要额外的努力 - 如果您使用 JSON 内容类型,您的类将作为后端代码的普通对象出现。请参阅此问题的众多答案,了解如何将 JSON 转换回类对象,以便可以调用其方法。

但是由于您问题中的类没有方法,所以没有关系,除非后端代码将使用instanceof.

为了避免这些问题,请使用只有数据成员的接口来表示与后端通信的对象。


D. *_*Phi 6

实际上,两者都能胜任。我建议您使用接口,但是如果您只是为了进行类型检查而只进行类型检查的话。

类和接口是功能强大的结构,不仅可以促进面向对象的编程,而且还可以促进TypeScript中的类型检查。类是一个蓝图,我们可以从中创建共享相同配置(属性和方法)的对象。接口是一组描述对象的相关属性和方法,但既不提供实现也不为它们初始化。

来自:https : //toddmotto.com/classes-vs-interfaces-in-typescript