[英]Possible to extend types in Typescript?
假设我有以下类型:
type Event = {
name: string;
dateCreated: string;
type: string;
}
我现在想扩展这种类型,即
type UserEvent extends Event = {
UserId: string;
}
这行不通。 我怎样才能做到这一点?
关键字extends
只能用于接口和类。
如果您只想声明具有附加属性的类型,可以使用交集类型:
type UserEvent = Event & {UserId: string}
TypeScript 2.2 的更新,如果类型满足一些限制,现在可以有一个扩展类对象类型的接口:
type Event = {
name: string;
dateCreated: string;
type: string;
}
interface UserEvent extends Event {
UserId: string;
}
相反,它不起作用 - 如果要使用extends
语法,则必须将UserEvent
声明为接口,而不是type
。
并且仍然不可能对任意类型使用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指出的那样,您可以使用交集类型实现类似的功能。
泛型扩展类型可以写成如下:
type Extension<T> = T & { someExtensionProperty: string }
你也可以这样做:
export type UserEvent = Event & { UserId: string; };
说我有以下类型:
type Event = {
name: string;
dateCreated: string;
type: string;
}
我现在想扩展这种类型,即
type UserEvent extends Event = {
UserId: string;
}
这是行不通的。 我怎样才能做到这一点?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.