我知道如何扩展TypeScript接口,但我在这里问的是如何 覆盖 接口中的特定键。例如,假设我有一个简单的界面A
:
interface A {
foo: string;
bar: number;
}
我还有另一个简单的界面B
,也有一个bar
键,但是有不同的类型:
interface B {
bar: string;
baz: number;
}
基本上,我想将这些接口合并为一个,给我以下界面:
interface C {
foo: string; // from A.foo
bar: string; // from B.bar (overrides A.bar)
baz: number; // from B.baz
}
我希望我能以某种方式延伸:
interface C extends A, B {}
但是我不能,因为我得到了这个错误,这完全是预期的并且是设计的:
界面' C'不能同时扩展类型' A'和' B'。命名 物业'酒吧'类型' A'和' B'不一样。
我不确定是否还有另一种我不知道的机制。我不认为交叉点或联合类型在这里有帮助。
答案 0 :(得分:1)
有点晚了...但是我解决了创建另一种类型的问题...
a = ['a','b','c']
此类型从界面中排除特定键(我称为“地址”)...
我用它来解决需要转换接口值的问题...
我删除了它,然后创建了一个扩展旧界面(没有键)的新界面+具有新keyType的界面...
示例:
'a' and 'b' and 'c'
您需要调整我为您自己的个人项目创建的 ExcludeAddress ...
也许这不是清洁的解决方案,但是...可以。
在我的示例中:我创建的 ISerializedAvailability 本质上是 IAvailability ,其中地址的类型为 string [] 而不是 Address []
答案 1 :(得分:0)
您可以使用联合类型:type C = A | B;
,但这两种方法都可以正常工作:
let c1: C = {
foo: "string",
bar: "string",
baz: 3
};
let c2: C = {
foo: "string",
bar: 4,
baz: 3
};