扩展具有一组值属性的接口



我有这个接口:


type Abc = "a" | "b" | "c"
interface Foobar_1_0 {
fooBar: Abc;
otherProp: number;
}
interface Foobar_1_1 extends Foobar_1_0 {
fooBar: Abc | "d" | "e" | "f"
}

我希望Foobar_1_1的foo属性是a、b、c、d、e、f中的一个,并通过扩展继承otherProp。然而,它不起作用,我如何才能做到这一点?

您面临的问题是Foobar_1_1不是Foobar_1_0的子集,因为Foobar_1_1中的属性fooBar的类型比原始类型更宽。对于并集类型,子集是具有相同数量或更少变体的东西。例如,a | ba | b | c的子集,但在您的情况下,它是另一种方式。考虑证据:

type ExtendsAbc = Abc | "d" | "e" | "f" extends Abc ? true : false 
// false it doesn't extend

上面清楚地表明你的类型没有扩展原来的类型,这就是错误发生的原因。

为了扩展所有属性,但使属性fooBar的类型更宽,我们可以在扩展Omit实用程序类型时省略此属性,请考虑:

interface Foobar_1_1 extends Omit<Foobar_1_0, 'fooBar'> {
fooBar: Abc | "d" | "e" | "f"
}

现在接口工作了,fooBar属性不能从Foobar_1_0扩展fooBar

最新更新