[英]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.