扩展另一个接口时获取基本接口

时间:2019-04-10 17:04:58

标签: javascript typescript interface

假设我有这个简单的界面:

interface IMyButton extends Partial<HTMLInputElement> {
  color?: string
}

这使我可以使用在HTMLInputElement中定义的属性来扩展基础IMyButton(例如,对于Web组件)。

有没有办法只获取基本类型IMyButton定义的属性,而不是包括HTMLInputElement中的所有属性的所有属性?

因此,我需要一个仅具有color?: string作为属性的新类型。

扩展接口随组件的不同而变化,即interface IMySelect extends Partial<HTMLSelectElement>,因此我不能仅仅排除固定类型。

我为什么需要这样做的一些背景:我有一个使用IMyButton的映射类型-因此,例如,使用API​​必须定义默认值。现在,此映射类型还包括HTMLInputElement属性,这些属性完全是可选的,甚至不需要默认值。例如,Visual Studio Code当然仍然显示扩展类型的所有属性,因此创建此对象确实很困难,因为智能感知被基本的html属性所困扰...

1 个答案:

答案 0 :(得分:1)

您已经弄清楚了(假设您可以重新定义界面)

  

所以我需要一个仅具有颜色的新类型?:字符串作为属性。

只需创建一个具有color属性的接口,然后同时扩展两者:

interface IMyButtonProps {
  color?: string
}

interface IMyButton extends IMyButtonProps, Partial<HTMLInputElement> {}