Possible to extend types in Typescript? Possible to extend types in Typescript? javascript javascript

Possible to extend types in Typescript?


The keyword extends can be used for interfaces and classes only.

If you just want to declare a type that has additional properties, you can use intersection type:

type UserEvent = Event & {UserId: string}

UPDATE for TypeScript 2.2, it's now possible to have an interface that extends object-like type, if the type satisfies some restrictions:

type Event = {   name: string;   dateCreated: string;   type: string;}interface UserEvent extends Event {   UserId: string; }

It does not work the other way round - UserEvent must be declared as interface, not a type if you want to use extends syntax.

And it's still impossible to use extend with arbitrary types - for example, it does not work if Event is a type parameter without any constraints.


you can intersect types:

type TypeA = {    nameA: string;};type TypeB = {    nameB: string;};export type TypeC = TypeA & TypeB;

somewhere in you code you can now do:

const some: TypeC = {    nameB: 'B',    nameA: 'A',};


What you are trying to achieve is equivalent to

interface Event {   name: string;   dateCreated: string;   type: string;}interface UserEvent extends Event {   UserId: string; }

The way you defined the types does not allow for specifying inheritance, however you can achieve something similar using intersection types, as artem pointed out.