当前位置: 首页 > 知识库问答 >
问题:

如何声明具有相同主体的2个接口?

苏华藏
2023-03-14

我有一个基本接口IInput,并从中扩展了3个接口IType1InputIType2InputIType3Input。在对Type2()进行了一些业务更改之后,IType2Input现在与IInput相同,但为了一致性,我不希望仅Type2()使用IInput,而不是使用扩展接口。我试着这样做:

    interface IType2Input extends IInput {}

然后,ESLint警告我不要使用空接口。如果我不想禁用此规则,是否有方法将IType2Input声明为与IInput相同的接口?

共有2个答案

段干河
2023-03-14

我知道你不是在寻找这个建议,所以请跳过下面的部分。这主要是为将来遇到这对问答的读者准备的。

我认为no empty interfaceESLint规则不适合您的用例,您真的应该为所讨论的行禁用该规则,而不必为整个代码库禁用它。

规则的留档表示“空接口等同于它的超类型...[,因此它]可以省略。”当你写的时候

interface IType2Input extends IInput {} // linter warning!

并得到一个linter警告,该规则希望您将所有对IType2Input的引用替换为IInput,因为IType2Input是冗余的。但你不想这么做。如果您找到重写代码的方法,使得两个名为IType2InputIInput的等效接口存在而不触发linter警告,那么您仍然违反了规则的精神,如果不是字母的话。

与其试图找出如何用可能比空接口更复杂的语法绕过规则,您只需对一个声明禁用规则,并对其进行注释,让人们知道您在做什么以及为什么:

// IType2Input is intentionally empty. It happens not
// to have more properties than IInput, but this may
// change in the future, and it helps to have a Type2-specific
// interface that people can use.  Therefore the no-empty-interface
// rule is not appropriate for this declaration:

// eslint-disable-next-line no-empty-interface
interface IType2Input extends IInput { }

从现在开始,我会假设你不想这么做。

绕过规则的一种方法是使用扩展多个接口的语法,但是“多个”接口都只是IInput

interface IType2Input extends IInput, IInput { } // no error

这设法不触发linter规则。但是,正如你所说,这基本上是一次黑客攻击。任何后来看到这段代码的人都可能会将其重构为仅扩展IInput,这将使您回到最初的问题。

操场连结至守则

漆雕育
2023-03-14

尝试使用类型而不是接口,直到该接口不同。请注意,发动机罩下的接口和类型是相同的。

type IType2Input = IInput;
 类似资料:
  • 问题内容: 我有一个table(),其中2个column(和)是id。这些对应名称的名称在带有列的另一个表()中。 假设我只是在使用,那么简单的内部联接就可以解决我在获取名称时遇到的问题。 如 但是,如果我希望该名称也要解析为什么?“内部连接”会将其解析为? 我知道以上查询是错误的。我可以得到那些对应于两个第和用? -初学者 问题答案: 我建议始终为表和列添加别名。因此,您将确定选择了哪些数据。

  • 我是JPA新手。目前,我正在编写一个带有注释的本机查询。我有一个类似下面的类 我正在编写两个查询,其中一个查询在选择投影中包含字段2,而另一个不包含字段2。如何对这两个查询使用相同的类?我尝试了瞬态注释。但它使两个查询的值都为null。

  • 问题内容: 在JPA中,我有2个实体:Entry和Comment。条目包含两个Comment对象集合。 为了存储此类对象,JPA + Hibernate创建“ Entry”表,“ Comment”表和单个“ Entry_Comment”: 对象的存储失败,并且不能同时为“非null”。 如何使用JPA + Hibernate存储包含两个相同类型的集合的对象? 问题答案: 这是许多Hibernate

  • 问题内容: 请帮我解决这个问题。 我有2个相同的表,一个是时间表,另一个是timetable_bk。这两个表具有相似的属性或字段。现在,我想将2个表映射到一个实体类(alltimetable)。 我已经尝试过Inheritance.TABLE_PER_CLASS策略,但是当我从AllTimetable查询使用时。它什么也没返回。 请帮我。我搜索了很多次,但是还没有得到答案。 最好的祝福。 问题答案

  • 问题内容: 只是为了扩展我以前的问题-我的数据库中有两个表,我想提取某些信息。下表: 您向我提供了以下代码来获取播放器的名称: 效果很好,谢谢-我只想进行两项调整: 我想返回得分手的名字以及球员的名字。由于m.scorer是一个ID,如果p.Name已被映射到m.playerID,我如何将其映射到p.Name属性? 上面的查询返回所有玩家的姓名。我很快就会添加搜索功能,您可以在其中搜索特定玩家的所

  • 我有两个表,在我的Spring代码中是学生和课程。我想创建一个关系表,“获取课程”。我只有学生ID和课程ID。我可以在我的java代码中创建一个具有两个主键的表,但我不能将它们声明为外键。 我尝试了这个解决方案,将两个外键作为主键,但没有成功,我认为其中缺少了一些部分。因此,我尝试了基于此解决方案的方法: (学生实体有id, name, surname)(课程实体有id, Coursename)