typescriptunion-types

Create typescript interface as union of other interfaces


I have a list of interfaces that extends one basic interface.

I have also some functions that can accept any of these interfaces.

I would like to create a new interface that describe that kind of parameter.

So I have something like this:

interface BasicInterface {...};

interface A extends BasicInterface {...};
interface B extends BasicInterface {...};

and I would like something like

interface C = A | B;

I know in my functions I can do

function X(param1: A | B) {};

but since it is more than one function I would like to have just one interface for all of them.


Solution

  • So, after some digging in the Typescript documentation I've found what I was looking for: type aliases.

    I can declare a new type like type C = A | B;

    Then in function I use type guards to access the right thing:

    function isA(param: C): param is A {
        return param.type === A;
    }
    
    function X(param1: C) {
      if (isA(param1)) //things related to A
      else //things related to B
    };