gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 17:30:33 25 4
gpt4 key购买 nike

为什么 TypeScript 在 implements 时允许重复组件?

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

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

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

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

最佳答案

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

这意味着 implementsextends 有不同的含义。 implements 说:我可以向这个类的每个消费者保证,它至少有接口(interface)的成员。由于接口(interface)中没有实际的实现,因此只要该类实现所有这些保证,就可以做出多个保证。你是对的,多次添加相同的保证没有任何意义,但它也没有真正的伤害。 TypeScript 的创建者可能禁止多次实现该接口(interface)。我们可以推测他们为什么不这样做;我的猜测是,由于 TypeScript 是基于 JavaScript 的,而 JS 相当宽容,他们不想禁止不会造成任何损害的东西。请注意,TS 是 JS 之上的类型层,所有类型信息最终将在编译为 JS 时被删除。在这种情况下,删除多个重复的接口(interface)实现并没有真正的伤害,因为结果将完全相同。

除了implementsextends 是另一回事。虽然有一些语言允许多重继承(例如 C++),但多重继承伴随着很多困难的实现细节(例如 diamond problem 或调用基类构造函数),因此许多语言不支持它的想法是它造成的问题多于它可能解决的问题。 TypeScript 不允许多重继承,这意味着您不能在一般原则上对多个基类使用 extends。与实现接口(interface)不同,继承类会对程序的工作方式产生影响,编译器将做的不仅仅是剥离类型信息。这就是为什么在那里提出错误是有意义的。

关于angular - 为什么 TypeScript 在实现时允许重复组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47307808/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com