说我有以下类型:
type Event = {
name: string;
dateCreated: string;
type: string;
}
我现在想扩展这种类型,即
type UserEvent extends Event = {
UserId: string;
}
这不起作用。我怎么能这样做?
答案 0 :(得分:113)
关键字extends
只能用于接口和类。
如果您只想声明具有其他属性的类型,可以使用intersection type:
type UserEvent = Event & {UserId: string}
TypeScript 2.2的{p> 更新,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;
}
它不起作用 - 如果要使用UserEvent
语法,type
必须声明为接口,而不是extends
。
答案 1 :(得分:6)
您要实现的目标等同于
interface Event {
name: string;
dateCreated: string;
type: string;
}
interface UserEvent extends Event {
UserId: string;
}
您定义类型的方式不允许指定继承,但是您可以使用交集类型实现类似的操作,如artem指出的那样。
答案 2 :(得分:5)
您可以相交类型:
type TypeA = {
nameA: string;
};
type TypeB = {
nameB: string;
};
export type TypeC = TypeA & TypeB;
您现在可以在代码中的某处执行
const some: TypeC = {
nameB: 'B',
nameA: 'A',
};
答案 3 :(得分:-1)
也许下面的方法对使用reactjs的TS有用
interface Event {
name: string;
dateCreated: string;
type: string;
}
interface UserEvent<T> extends Event<T> {
UserId: string;
}