假设我有以下类型:
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的UPDATE,现在可以有一个扩展类对象类型的接口,前提是该类型满足某些限制:
type Event = {
name: string;
dateCreated: string;
type: string;
}
interface UserEvent extends Event {
UserId: string;
}
反之则不行——如果你想使用extends语法,UserEvent必须声明为接口,而不是类型。
对于任意类型使用extend仍然是不可能的——例如,如果Event是一个没有任何约束的类型参数,它就不起作用。
其他回答
泛型扩展类型可以这样写:
type Extension<T> = T & { someExtensionProperty: string }
你可以交叉类型:
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指出。
关键字extends只能用于接口和类。
如果你只是想声明一个有额外属性的类型,你可以使用交集类型:
type UserEvent = Event & {UserId: string}
对于TypeScript 2.2的UPDATE,现在可以有一个扩展类对象类型的接口,前提是该类型满足某些限制:
type Event = {
name: string;
dateCreated: string;
type: string;
}
interface UserEvent extends Event {
UserId: string;
}
反之则不行——如果你想使用extends语法,UserEvent必须声明为接口,而不是类型。
对于任意类型使用extend仍然是不可能的——例如,如果Event是一个没有任何约束的类型参数,它就不起作用。