可以在Typescript中扩展类型?

假设我有以下类型:

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

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

type UserEvent extends Event = {
UserId: string;
}

这行不通。我该怎么做呢?

472560 次浏览

你所要达到的就是等价的

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


interface UserEvent extends Event {
UserId: string;
}

定义类型的方法不允许指定继承,但是可以使用交集类型实现类似的功能,正如artem指出的那样。

关键字extends只能用于接口和类。

如果你只是想声明一个有额外属性的类型,你可以使用十字路口类型:

type UserEvent = Event & {UserId: string}

更新对于TypeScript 2.2, 现在可以使用扩展类对象类型的接口,如果类型满足某些限制:

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


interface UserEvent extends Event {
UserId: string;
}

反之则不行——UserEvent必须声明为接口,如果你想使用extends语法,就不能声明为type

而且仍然不可能使用extend 使用任意类型—例如,如果Event是一个没有任何约束的类型参数,它就不起作用。

你可以交叉类型:

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

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

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

泛型扩展类型可以这样写:

type Extension<T> = T & { someExtensionProperty: string }