2016-12-29 3 views
11

sagen, dass ich den folgenden Typ haben:Möglich, Typen in Typescript zu erweitern?

type Event = { 
    name: string; 
    dateCreated: string; 
    type: string; 
} 

Ich möchte nun diese Art erweitern, das heißt

type UserEvent extends Event = { 
    UserId: string; 
} 

Dies funktioniert nicht. Wie kann ich das machen?

+1

Das 'Baumuster zum Schlüsselwort wird verwendet [type Aliase] (https://www.typescriptlang.org/docs/handbook/release-notes/typescript-1-4.html#type-aliases), nicht-Schnittstellen zu definieren, oder Klassen. –

Antwort

20

Das Schlüsselwort extends kann nur für Schnittstellen und Klassen verwendet werden.

Wenn Sie nur eine Art erklären wollen, dass zusätzliche Eigenschaften hat, können Sie intersection type verwenden:

type UserEvent = Event & {UserId: string} 

UPDATE für Typoskript 2.2, it's now possible to have an interface that extends object-like type:

type Event = { 
    name: string; 
    dateCreated: string; 
    type: string; 
} 

interface UserEvent extends Event { 
    UserId: string; 
} 

Es funktioniert nicht die andersherum - UserEvent muss als Schnittstelle deklariert werden, nicht type, wenn Sie extends Syntax verwenden möchten.

2

Was Sie versuchen zu erreichen, ist äquivalent zu

interface Event { 
    name: string; 
    dateCreated: string; 
    type: string; 
} 

interface UserEvent extends Event { 
    UserId: string; 
} 

Die Art und Weise Sie die Typen definiert erlaubt keine Vererbung für die Angabe, aber Sie etwas ähnliches mit Schnittarten erreichen können, wie artem hingewiesen.

+0

Ja, aber ich mag das Wort 'interface' nicht, wenn ich eigentlich einen' type' bedeute. – Kousha

+0

Fair genug, dann sollte artems Antwort zu dir passen :) – olydis

Verwandte Themen