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.