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

时间:2017-01-16 07:19:43

标签: inheritance typescript

这些方面的东西:

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

interface B extends A {
  b: number;
}

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

因此B将等于C(省略字段x但仍延伸A)。可能吗?如果是这样,怎么样?

2 个答案:

答案 0 :(得分:2)

这是处理删除子接口成员的另一种方法:

interface Base {
  a: number;
  x?: any;
}

interface Child extends Base {
  x?: undefined;
}

这样,字段x根本不应该存在,或者如果存在,则必须将其设置为undefined,这在大多数情况下都与不存在一样好(除非您尝试枚举班级成员或执行类似操作)。

答案 1 :(得分:1)

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

但是你可以通过界面再造来克服这个问题:

  1. 提取基本界面

    interface BaseA {
      a: number;
    }
    
    interface A extends Base A {
      x: any;
    }
    
    interface B extends A {
      b: number;
    }
    
    interface C extends BaseA {
      b: number;
    }
    
  2. CB都可投放到BaseA

    1. 使用可选字段

      interface A {
        a: number;
        x?: any;
      }
      
      interface B extends A {
        b: number;
      }
      
      interface C extends A {
        b: number;
      }
      
    2. 我确信还有其他方法取决于某个任务上下文。

相关问题