可以在Typescript中扩展类型吗?

时间:2016-12-29 18:10:26

标签: javascript typescript

说我有以下类型:

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

我现在想扩展这种类型,即

type UserEvent extends Event = {
   UserId: string; 
}

这不起作用。我怎么能这样做?

4 个答案:

答案 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;
}