我最近看了老师的教程,他给我们看了这段代码:
并且他还说products
阵列是any []
的类型不是使用强类型的优点,这是TypeScript的特征所以它应该被定义为INTERFACE,但我现在想知道,为什么他没有创建一个类和产品数组可能属于那种类型?
他说Interfaces的目的是提供强类型和工具支持..所以他写了这个界面:
所以我想知道他为什么不创建一个类:
export class Product
..后来他会用products : Product []
..
所以基本上我无法弄清楚为什么Interface as dataType更好而不是类?
对不起截图而不是真正的代码,那是因为他主持了在线视频课程..
谢谢
检查这个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.
将接口视为对象的蓝图 - 一组简短的指令,保证在使用该接口标记的对象上可以使用某组字段/方法。它们为您提供了一种利用强类型的方法,同时保持代码尽可能轻量级。如上所述,接口被删除并编译时间,因为它实际上没有任何编程含义 - 严格来说,这使得代码不易出错,更容易为您和其他任何人工作。
如果需要指定实现细节,例如getter / setter / constructor逻辑或方法,那就是使用类的时候。实际上,如果您的示例中的calculateDiscount()方法的逻辑在所有Products中保持相同,那么在这种情况下,类可能更有意义。
类可以作为TypeScript中的接口使用。接口不能作为类工作。其中一个可以基于简约原则来选择。
像
class SomeProductClass implements ProductClass {...}
和
const plainProduct: ProductClass = {...};
经常发生。
但是,在定义类时,预计它或其后代将被实例化。如果不这样做,那将会产生误导,因为这就是接口的用途。
在Angular中常见的是定义不会被实例化的抽象类,但这是因为抽象类可以用作接口和dependency injection tokens。