大致如下:
interface A {
a: number;
x: any;
}
interface B extends A {
b: number;
}
interface C {
a: number;
b: number;
}
因此,B
等于C
(省略字段x
但仍扩展A
)。可能吗?如果是这样,如何?
删除 TypeScript 中接口的继承字段/方法。
但是您可以通过接口重新设计来克服这个问题:
提取基本接口
interface BaseA { a: number; } interface A extends Base A { x: any; } interface B extends A { b: number; } interface C extends BaseA { b: number; }
C
和B
都可以投BaseA
.
使用可选字段
interface A { a: number; x?: any; } interface B extends A { b: number; } interface C extends A { b: number; }
我相信还有其他方法取决于特定的任务上下文。
这是处理删除子接口成员的另一种黑客方法:
interface Base {
a: number;
x?: any;
}
interface Child extends Base {
x?: undefined;
}
这样,字段x
根本不应该存在,或者如果存在,则必须将其设置为 undefined
在大多数情况下与不存在一样好(除非您尝试枚举类成员或执行类似操作)。
这可以使用打字稿省略类型键来实现,注意在打字稿中您可以一次扩展多个接口。
打字稿省略:
通过从"类型"中选取所有属性来构造类型,然后删除键(字符串文本或字符串文本的并集)。
使用您的示例:
interface A {
a: number;
x: any;
}
interface B extends A {
b: number;
}
interface C extends Omit<A, 'x'>, Omit<B, 'x'> {}
返回:
interface C {
a: number;
b: number;
}
工作打字稿游乐场演示