Kou*_*sha 87 javascript typescript
说我有以下类型:
type Event = {
name: string;
dateCreated: string;
type: string;
}
Run Code Online (Sandbox Code Playgroud)
我现在想扩展这种类型,即
type UserEvent extends Event = {
UserId: string;
}
Run Code Online (Sandbox Code Playgroud)
这不起作用.我怎样才能做到这一点?
art*_*tem 162
该关键字extends只能用于接口和类.
如果您只想声明具有其他属性的类型,则可以使用交集类型:
type UserEvent = Event & {UserId: string}
Run Code Online (Sandbox Code Playgroud)
对于TypeScript 2.2的UPDATE,它现在可以有一个扩展类似对象类型的接口:
type Event = {
name: string;
dateCreated: string;
type: string;
}
interface UserEvent extends Event {
UserId: string;
}
Run Code Online (Sandbox Code Playgroud)
它反过来不起作用 - UserEvent必须声明为接口,而不是a type如果你想使用extends语法.
小智 34
通用扩展类型可以写成如下:
type Extension<T> = T & { someExtensionProperty: string }
Run Code Online (Sandbox Code Playgroud)
Kay*_*yes 16
您还可以通过使用 来做到这一点type,但使用 除外interface。
type Event = {
name: string;
dateCreated: string;
type: string;
}
type UserEvent = {
UserId: string;
} & Event
Run Code Online (Sandbox Code Playgroud)
您可以相交类型:
type TypeA = {
nameA: string;
};
type TypeB = {
nameB: string;
};
export type TypeC = TypeA & TypeB;
Run Code Online (Sandbox Code Playgroud)
您现在可以在代码中的某处执行以下操作:
const some: TypeC = {
nameB: 'B',
nameA: 'A',
};
Run Code Online (Sandbox Code Playgroud)
你想要实现的是等同于
interface Event {
name: string;
dateCreated: string;
type: string;
}
interface UserEvent extends Event {
UserId: string;
}
Run Code Online (Sandbox Code Playgroud)
你定义类型的方式不允许指定继承,但是你可以使用交集类型实现类似的东西,正如artem指出的那样.
你也可以这样做:
export type UserEvent = Event & { UserId: string; };
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
53084 次 |
| 最近记录: |