假设我有以下类型:
type Event = {
name: string;
dateCreated: string;
type: string;
}
我现在想扩展这种类型,即
type UserEvent extends Event = {
UserId: string;
}
这不起作用。我怎样才能做到这一点?
假设我有以下类型:
type Event = {
name: string;
dateCreated: string;
type: string;
}
我现在想扩展这种类型,即
type UserEvent extends Event = {
UserId: string;
}
这不起作用。我怎样才能做到这一点?
该关键字extends
只能用于接口和类。
如果您只想声明具有附加属性的类型,则可以使用交集类型:
type UserEvent = Event & {UserId: string}
TypeScript 2.2 的更新,如果类型满足一些限制,现在可以有一个扩展类对象 type 的接口:
type Event = {
name: string;
dateCreated: string;
type: string;
}
interface UserEvent extends Event {
UserId: string;
}
它不能反过来工作 -UserEvent
必须声明为接口,而不是 atype
如果你想使用extends
语法。
并且仍然无法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指出的那样。
你也可以这样做:
export type UserEvent = Event & { UserId: string; };