Typescript 可选地扩展接口。

16 浏览
0 Comments

Typescript 可选地扩展接口。

我有两个接口,其中一个继承另一个。然而,我希望能够扩展第一个接口并使其所有类型都变为可选的。我不想在第二个接口中重写第一个接口的所有定义,因为这样有什么好处呢?也不想重新定义第一个接口,因为它在其他地方也被使用。

代码示例:

interface First {
  type1: string
  type2: string
}
// 似乎是多余的重写(为什么我需要扩展呢?)
interface Second extends First {
  type1?: string
  type2?: string
  type3: string
  type4: string
}
// 我想象中的扩展方式(但是无效)
interface Second extends First? {
  type3: string
  type4: string
}

我已经进行了研究,并找到了一个回答类似问题的问题(链接如下)。但是那个问题已经一年没有人回答了,而且我认为我的问题并不完全相同,因为我想要使整个扩展的接口都变为可选的,而不仅仅是其中的一些类型。

在TypeScript中有没有办法做到这一点,还是我只需要接受并创建一个更长的第二个接口呢?

更新(解释为什么我希望它能够工作):

我正在编写一个React web应用程序,并且有一个组件用于以一种允许用户编辑实体的方式显示来自我的数据库的实体。我希望我的React组件能够处理用户创建新实体以及编辑现有实体的情况。

为了与上面的示例保持一致,假设我的数据库实体的值由First接口复制,并且React组件使用Second接口中存在的两个传递的props。React组件将始终具有Second中的两个值,但不一定具有First中的值。

在用户创建新实体的情况下,我希望只使用Second中的值构建React组件,而不必为First中的所有内容指定null值。在用户编辑现有实体的情况下,我将传递First和Second中的所有内容。

在两种情况下,UI都是相同的,但是使用不同的值构建。

0