当前位置: 首页 > 知识库问答 >
问题:

可以在打字稿中扩展类型吗?

陶宏浚
2023-03-14

假设我有以下类型:

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

我现在想扩展这个类型,即。

type UserEvent extends Event = {
   UserId: string; 
}

这行不通。我该怎么做?

共有3个答案

欧阳博文
2023-03-14

你想达到的目标相当于

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

interface UserEvent extends Event {
   UserId: string; 
}

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

邢璞
2023-03-14

您可以与类型相交:

type TypeA = {
    nameA: string;
};
type TypeB = {
    nameB: string;
};
export type TypeC = TypeA & TypeB;

在你的代码中,你现在可以做到:

const some: TypeC = {
    nameB: 'B',
    nameA: 'A',
};
易京
2023-03-14

关键字< code>extends只能用于接口和类。

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

type UserEvent = Event & {UserId: string}

更新TypeScript 2.2,如果类型满足某些限制,现在可以有一个扩展类对象类型的接口:

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

interface UserEvent extends Event {
   UserId: string; 
}

如果要使用扩展语法,则必须将类型声明为接口,而不是类型

而且仍然不可能将扩展与任意类型一起使用 - 例如,如果 Event 是没有任何约束的类型参数,则它不起作用。

 类似资料:
  • 问题内容: React事件的正确类型是什么。最初,我只是为了简单起见而使用。现在,我正在尝试清理并避免完全使用。 所以像这样一个简单的形式: 我在这里使用什么类型作为事件类型? 似乎没有工作,因为我收到一个错误消息,并且不存在。 对于所有事件的更笼统的回答,我们将不胜感激。 谢谢 问题答案: 该SyntheticEvent接口是通用的: 并且是一般约束与的交集 。 另外,由于事件是由输入元素引起的

  • 我在TypeScript中遇到了module.d.ts中的导出声明: "const扩展"类型是一个对象吗?为什么它会返回空而不是指定的类型?

  • 我想我本质上仍然是一名C程序员。我刚刚启动了一个非常简单的助手类来清理一些调试UI: ...我在想,我真的不想要任何价值。实际上这并不重要,这是一个一次性的辅助函数。但多年来,在开发过程中,我多次意外地尝试渲染复杂的东西。我对Typescript还只是有一定的经验,所以我不太知道它的正确术语,但我想知道的是,我如何断言编译时类型的值是可渲染的?我把它称为C语言中的类型特征。typescript中的

  • 我正在处理打字稿,并将一个函数传递给另一个函数。 如果我有一个传递到typescript中另一个函数的函数,我应该如何编写类型? 我尝试了,但似乎不起作用。

  • 在可能的副本上: 此线程不是在询问如何扩展类。它问为什么一个声明为的类可能会扩展另一个类。 从该线程: <code>final</code>类只是一个不能扩展的类。 但是,我有一个帮助程序类,我声明它是,并了另一个类: Eclipse没有检测到任何错误。我已经测试了这个类,并且PDF是成功生成的,没有错误。 为什么我能够课程,而理论上我不应该延长? (如果重要的话,我正在使用Java7。)

  • 我试图用一种方法扩展Puppeter的类ElementHandle。我已经检查了一些例子,并编写了简单的代码,就像这个答案一样。 但是VSCode显示了我更改ElementHandle prototype所在行的一个错误: “ElementHandle”仅引用类型,但在此处用作值。ts(2693) 我怎么才能修好它? 我的代码: ElementHandle类:https://github.com/