Typescript是否可以扩展类型?

9 浏览
0 Comments

Typescript是否可以扩展类型?

假设我有以下类型:

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

我现在想要扩展这个类型,即:

type UserEvent extends Event = {
   UserId: string; 
}

这样做是不起作用的。我应该如何操作?

admin 更改状态以发布 2023年5月21日
0
0 Comments

你可以交叉类型:

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

在你的代码中,现在可以这样做:

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

0
0 Comments

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是没有任何约束的类型参数,则无法使用。

0