Inheritance 是否可以删除子类/接口中继承的字段/方法?

Inheritance 是否可以删除子类/接口中继承的字段/方法?,inheritance,typescript,Inheritance,Typescript,大致如下: interface A { a: number; x: any; } interface B extends A { b: number; } interface C { a: number; b: number; } 因此B将等于C(省略字段x,但仍然扩展A)。可能吗?如果是,如何删除?无法删除TypeScript中接口的继承字段/方法 但您可以通过界面再造来克服这一问题: 提取基接口 interface BaseA { a: number; } i

大致如下:

interface A {
  a: number;
  x: any;
}

interface B extends A {
  b: number;
}

interface C {
  a: number;
  b: number;
}

因此
B
将等于
C
(省略字段
x
,但仍然扩展
A
)。可能吗?如果是,如何删除?

无法删除TypeScript中接口的继承字段/方法

但您可以通过界面再造来克服这一问题:

  • 提取基接口

    interface BaseA {
      a: number;
    }
    
    interface A extends Base A {
      x: any;
    }
    
    interface B extends A {
      b: number;
    }
    
    interface C extends BaseA {
      b: number;
    }
    
  • C
    B
    都可以铸造到
    BaseA

  • 使用可选字段

    interface A {
      a: number;
      x?: any;
    }
    
    interface B extends A {
      b: number;
    }
    
    interface C extends A {
      b: number;
    }
    

  • 我确信,根据特定的任务上下文,还有其他方法。

    下面是另一种处理删除子接口成员的黑客方法:

    interface Base {
      a: number;
      x?: any;
    }
    
    interface Child extends Base {
      x?: undefined;
    }
    

    通过这种方式,字段
    x
    应该根本不存在,或者如果它存在,则必须将其设置为
    undefined
    ,这在大多数情况下都是不存在的(除非您试图枚举类成员或做类似的事情)。

    您试图通过这种方式实现什么?这似乎违背了继承的全部意义。@JamesHughes对继承的最一般定义是“修改”而不仅仅是在成员的上下文中“添加”。是的,你可以修改它们,但我相当肯定修改不包括删除。我理解在“修改”下也包括删除或某种形式的隐藏。您描述的是子类型,而不是继承。维基:继承不应与子类型混淆。[3][4]在一些语言中,继承和子类型是一致的,而在另一些语言中,继承和子类型是不同的;一般来说,子类型建立is-a关系,而继承只重用实现并建立语法关系,不一定是语义关系(继承不确保行为子类型)。“由于继承概念原则,无法删除子类/接口中的继承字段/方法。“不正确,继承不是子类型。继承是关于代码重用的,我非常确定,根据继承的定义,任何类型的更改都可以发生在子级中,甚至可以删除成员。第二段说得很清楚:对不起,我不能同意你的观点。我没有发现直接提到子接口的成员删除。IMO接口是一个契约声明,因此子接口应该实现父接口契约。否则,将不会实现父接口。您将继承(某些部分可以在子类型中使用)与子类型(子类型可以扮演与父类型相同的角色)混淆。维基:继承不应与子类型混淆。[3][4]在一些语言中,继承和子类型是一致的,而在另一些语言中,继承和子类型是不同的;通常,子类型建立一个is-a关系,而继承只重用实现并建立一个语法关系,不一定是语义关系(继承不保证行为子类型)“接口是一个契约声明,因此子接口应该实现父接口契约”,如果我没有弄错的话,“Liskov替换原则”是子类型,而不是继承…我不喜欢holywars:)就我所知,对于TypeScript,你的问题的答案是“否”,无论我们如何理解接口继承。如果有人告诉我们如何对你的问题回答“是”,我会删除我的答案,并投正确的一票。