angular – 为什么TypeScript在实现时允许重复组件?

前端之家收集整理的这篇文章主要介绍了angular – 为什么TypeScript在实现时允许重复组件?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
为什么TypeScript在实现时允许重复组件?

import { Component,OnInit } from '@angular/core';

export class CreateVersionComponent implements OnInit,OnInit,OnInit { }// no error
export class CreateVersionComponent extends OnInit,OnInit { }// getting error

但它在组件扩展时抛出重复的标识符错误.

So what is the reason for typescript accepting duplicate component while implements? which situation we need to use it?

解决方法

要理解为什么第一个代码不是问题,但第二个代码是,你需要理解类和接口之间的区别.接口是其实现者至少提供接口成员的保证.它不提供任何实际功能.但是一个类可以包含实现代码;您可以从类继承以重用该代码并通过添加代码或更改现有实现来更改其行为.

这意味着实现和扩展具有不同的含义.工具说:我可以保证这个类的每个消费者,它至少会有接口的成员.由于接口中没有实际的实现,因此只要该类实现了所有这些保证,就可以制作多个这些保证.你是对的,多次添加相同的保证没有任何意义,但它确实也不会受到伤害. TypeScript的创建者可能被禁止多次实现该接口.我们可以推测他们为什么没有;我的猜测是,由于TypeScript基于JavaScript而且JS非常宽容,他们不想禁止不会造成任何损害的东西.请注意,TS是JS之上的类型层,并且在编译到JS期间最终会丢弃所有类型信息.在这种情况下,丢弃多个重复的接口实现并没有真正受到伤害,因为结果将完全相同.

除了工具之外,延伸是一个不同的故事.虽然有一些语言允许多重继承(例如C),但是多重继承伴随着许多困难的实现细节(例如diamond problem调用基类构造函数),因此许多语言不支持它,因为它会导致它比它可能解决的问题更多. TypeScript不允许多重继承,这意味着您不能在一般原则上使用具有多个基类的扩展.与实现接口不同,继承类会对程序的工作方式产生影响,编译器所做的不仅仅是剥离类型信息.这就是为什么在那里引发错误是有道理的.

猜你在找的Angularjs相关文章