簡體   English   中英

可以在 Typescript 中擴展類型嗎?

[英]Possible to extend types in Typescript?

假設我有以下類型:

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

我現在想擴展這種類型,即

type UserEvent extends Event = {
   UserId: string; 
}

這行不通。 我怎樣才能做到這一點?

關鍵字extends只能用於接口和類。

如果您只想聲明具有附加屬性的類型,可以使用交集類型

type UserEvent = Event & {UserId: string}

TypeScript 2.2 的更新,如果類型滿足一些限制,現在可以有一個擴展類對象類型的接口

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

interface UserEvent extends Event {
   UserId: string; 
}

相反,它不起作用 - 如果要使用extends語法,則必須將UserEvent聲明為接口,而不是type

並且仍然不可能對任意類型使用extend - 例如,如果Event是沒有任何約束的類型參數,它就不起作用。

你可以相交類型:

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

您現在可以在代碼中的某處執行以下操作:

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

您要達到的目標相當於

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

interface UserEvent extends Event {
   UserId: string; 
}

您定義類型的方式不允許指定繼承,但是正如artem指出的那樣,您可以使用交集類型實現類似的功能。

泛型擴展類型可以寫成如下:

type Extension<T> = T & { someExtensionProperty: string }

你也可以這樣做:

export type UserEvent = Event & { UserId: string; };

說我有以下類型:

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

我現在想擴展這種類型,即

type UserEvent extends Event = {
   UserId: string; 
}

這是行不通的。 我怎樣才能做到這一點?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM