如果已经有类,为什么我应该使用接口作为角度的数据类型?

问题描述 投票:1回答:3

我最近看了老师的教程,他给我们看了这段代码:

enter image description here

并且他还说products阵列是any []的类型不是使用强类型的优点,这是TypeScript的特征所以它应该被定义为INTERFACE,但我现在想知道,为什么他没有创建一个类和产品数组可能属于那种类型?

他说Interfaces的目的是提供强类型和工具支持..所以他写了这个界面:

enter image description here

所以我想知道他为什么不创建一个类:

export class Product ..后来他会用products : Product [] ..

所以基本上我无法弄清楚为什么Interface as dataType更好而不是类?

对不起截图而不是真正的代码,那是因为他主持了在线视频课程..

谢谢

javascript angular typescript types
3个回答
1
投票

检查这个text writen by James Henry可能会澄清你这个问题。简而言之:Unlike classes, interfaces are completely removed during compilation and so they will not add any unnecessary bloat to our final JavaScript code.


0
投票

将接口视为对象的蓝图 - 一组简短的指令,保证在使用该接口标记的对象上可以使用某组字段/方法。它们为您提供了一种利用强类型的方法,同时保持代码尽可能轻量级。如上所述,接口被删除并编译时间,因为它实际上没有任何编程含义 - 严格来说,这使得代码不易出错,更容易为您和其他任何人工作。

如果需要指定实现细节,例如getter / setter / constructor逻辑或方法,那就是使用类的时候。实际上,如果您的示例中的calculateDiscount()方法的逻辑在所有Products中保持相同,那么在这种情况下,类可能更有意义。


0
投票

类可以作为TypeScript中的接口使用。接口不能作为类工作。其中一个可以基于简约原则来选择。

class SomeProductClass implements ProductClass {...}

const plainProduct: ProductClass = {...};

经常发生。

但是,在定义类时,预计它或其后代将被实例化。如果不这样做,那将会产生误导,因为这就是接口的用途。

在Angular中常见的是定义不会被实例化的抽象类,但这是因为抽象类可以用作接口和dependency injection tokens

© www.soinside.com 2019 - 2024. All rights reserved.