【发布时间】:2019-03-06 06:09:36
【问题描述】:
我正在尝试为一种类型扩展 Partial 接口,但这使我无法要求扩展原始类型的任何接口中已经提供的字段。
例子:
interface Text {
text: string;
}
interface ButtonStyles extends Partial<Text> {
isBold?: false;
}
// is this a variant of the diamond problem?
interface Button extends ButtonStyles, Text {}
这会产生error TS2320: Interface 'Button' cannot simultaneously extend types 'ButtonStyles' and 'Text'1。但是,我可以通过像这样定义Button 来覆盖接口而不扩展Text:
interface Button extends ButtonStyles {
text: string;
}
我真正想要的是拥有ButtonStyles 不需要text 属性,而是允许它-同时还强制Button 实现具有text 属性。是否有更合适的方法可以将属性提取为基本接口的可选属性,同时让它们用于扩展接口?这个问题有名字吗?
【问题讨论】:
-
那么
interface Button extends ButtonStyles { text: string; }有什么问题? -
这是一个非常简单的例子。让我们假设
Text有几个我想要的属性,我想让更改Text的定义变得非常容易,并将这些更改轻松传递给我的所有按钮和其他扩展类型。
标签: typescript