Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is it possible to remove an inherited field/method in a child class/interface?

Something along these lines:

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

interface B extends A {
  b: number;
}

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

So the B would be equal to C (omitting field x but still extending A). Is it possible? If so, how?

like image 380
monnef Avatar asked Oct 16 '25 03:10

monnef


1 Answers

It is impossible to remove an inherited field/method of an interface in TypeScript.

But you can overcome this via interfaces reengineering:

  1. Extract base interface

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

Both C and B will be castable to BaseA.

  1. Use optional field

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

I'm sure there are other ways depending on the certain task context.

like image 98
TSV Avatar answered Oct 18 '25 07:10

TSV