假设我有以下类型:
type Event = {
name: string;
dateCreated: string;
type: string;
}
我现在想扩展这种类型,即
type UserEvent extends Event = {
UserId: string;
}
这行不通。我怎样才能做到这一点?
type
关键字用于定义 type aliases,而不是接口或类。
关键字 extends
只能用于接口和类。
如果您只想声明具有附加属性的类型,可以使用 intersection type:
type UserEvent = Event & {UserId: string}
UPDATE 用于 TypeScript 2.2,it's now possible to have an interface that extends object-like type,如果类型满足某些限制:
type Event = {
name: string;
dateCreated: string;
type: string;
}
interface UserEvent extends Event {
UserId: string;
}
相反,它不起作用 - 如果您想使用 extends
语法,必须将 UserEvent
声明为接口,而不是 type
。
而且仍然无法使用 extend
with arbitrary types - 例如,如果 Event
是没有任何约束的类型参数,它就不起作用。
你可以相交类型:
type TypeA = {
nameA: string;
};
type TypeB = {
nameB: string;
};
export type TypeC = TypeA & TypeB;
您现在可以在代码中的某处执行以下操作:
const some: TypeC = {
nameB: 'B',
nameA: 'A',
};
TextInputProps
。谢谢!
您要达到的目标相当于
interface Event {
name: string;
dateCreated: string;
type: string;
}
interface UserEvent extends Event {
UserId: string;
}
您定义类型的方式不允许指定继承,但是您可以使用交集类型实现类似的功能,正如 artem 指出的那样。
interface
这个词,因为我实际上是指 type
泛型扩展类型可以写成如下:
type Extension<T> = T & { someExtensionProperty: string }
interface A<T> extends B<T> {blar}
接口只能扩展对象类型或对象类型与静态已知成员的交集interface Identifiable<T> extends T { id: string }
给我错误“接口只能扩展对象类型或对象类型与静态已知 members.ts(2312) 的交集”