假设我有以下类型:
type Event = { name: string; dateCreated: string; type: string; }
现在我想扩展这个类型,即。
type UserEvent extends Event = { UserId: string; }
这行不通。我该怎么做呢?
你所要达到的就是等价的
interface Event { name: string; dateCreated: string; type: string; } interface UserEvent extends Event { UserId: string; }
定义类型的方法不允许指定继承,但是可以使用交集类型实现类似的功能,正如artem指出的那样。
关键字extends只能用于接口和类。
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。
UserEvent
type
而且仍然不可能使用extend 使用任意类型—例如,如果Event是一个没有任何约束的类型参数,它就不起作用。
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 }