我最近看了一个关于使用TypeScript的Angular 2教程,但不确定什么时候用接口,什么时候用模型来处理数据结构。

接口示例:

export interface IProduct {
    ProductNumber: number;
    ProductName: string;
    ProductDescription: string;
}

模型示例:

export class Product {
    constructor(
        public ProductNumber: number,
        public ProductName: string,
        public ProductDescription: string
    ){}
}

我想从URL加载JSON数据并绑定到接口/模型。有时我想要单个数据对象,有时我想保存对象的数组。

我应该使用哪一个,为什么?


当前回答

为了使代码更加灵活,我们需要使用接口。 创建接口并在类的构造函数中传递接口类型。它使用依赖注入。

好处:

如果接口的参数有变化,则不需要改变类。 2.为了进行测试,可以在类的构造函数中使用模拟数据。

其他回答

正如@ThierryTemplier所说,从服务器接收数据,并在组件之间传输模型(以保持智能感知列表并使设计时错误),使用接口是可以的,但我认为对于向服务器发送数据(DTO),最好使用类来利用从模型自动映射DTO的优势。

使用类而不是接口,这是我在所有研究后发现的。

为什么?单独的类比类加接口的代码要少。(无论如何,你可能需要一个类的数据模型)

为什么?类可以充当接口(使用实现而不是扩展)。

为什么?在Angular依赖注入中,接口类可以是提供者查找令牌。

来自Angular Style Guide

基本上,一个类可以做接口能做的所有事情。所以可能永远不需要使用接口。

当您只是想检查数据类型以确保响应始终具有必要的键时,请使用interface。类/模型不仅仅用于检查数据类型。另外,很高兴知道javascript中不存在接口,这意味着typescript将总是在编译时处理接口,不选择javascript原生的类。

接口描述了类的契约或新类型。 它是一个纯Typescript元素,所以它不会影响Javascript。

一个模型,也就是一个类,是一个实际的用来生成新对象的JS函数。

我想从URL加载JSON数据并绑定到接口/模型。

选择一个模型,否则它在Javascript中仍然是JSON。

为了使代码更加灵活,我们需要使用接口。 创建接口并在类的构造函数中传递接口类型。它使用依赖注入。

好处:

如果接口的参数有变化,则不需要改变类。 2.为了进行测试,可以在类的构造函数中使用模拟数据。