假设我有以下类型:

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是一个没有任何约束的类型参数,它就不起作用。