我有这个接口:
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 | b
是a | 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
。