Javascript 可以在Typescript中扩展类型吗?

Javascript 可以在Typescript中扩展类型吗?,javascript,typescript,Javascript,Typescript,假设我有以下类型: type Event = { name: string; dateCreated: string; type: string; } 我现在想扩展这个类型,即 type UserEvent extends Event = { UserId: string; } 这不管用。我怎样才能做到这一点呢?你想要达到的目标相当于 interface Event { name: string; dateCreated: string; type

假设我有以下类型:

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

您定义类型的方式不允许指定继承,但是您可以使用交集类型实现类似的功能,正如所指出的。

关键字
extends
只能用于接口和类

如果只想声明具有其他属性的类型,可以使用:

为TypeScript 2.2更新,如果类型满足某些限制:

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

interface UserEvent extends Event {
   UserId: string; 
}
反之亦然-
UserEvent
必须声明为接口,而不是
type
,如果要使用
extends
语法


而且仍然无法使用
extend
——例如,如果
Event
是一个没有任何约束的类型参数,那么它就不起作用

您可以与以下类型相交:

type TypeA = {
    nameA: string;
};
type TypeB = {
    nameB: string;
};
export type TypeC = TypeA & TypeB;
在您的代码中,您现在可以执行以下操作:

const some: TypeC = {
    nameB: 'B',
    nameA: 'A',
};
您还可以执行以下操作:

export type UserEvent = Event & { UserId: string; };

type
关键字用于定义,而不是接口或类。是的,但我不喜欢
interface
这个词,因为我实际上指的是
type
足够公平,那么artem的答案应该适合你:)我使用的是TS v3.5.2,我无法让接口扩展类型<代码>接口A扩展B{blar}接口只能扩展对象类型或对象类型与静态已知members@WORMSS这样做
接口{id:string}
会导致错误“接口只能扩展对象类型或对象类型与静态已知成员的交集。ts(2312)“这是一个很好的解决方案。我在React Native中工作,这使我能够轻松地为自己的自定义文本输入组件扩展
TextInputProps
。谢谢太好了,这就行了。感谢您提供的解决方案。这个答案提供了什么(上次编辑于2019年,因此没有理由复制)中没有的内容?
export type UserEvent = Event & { UserId: string; };