【发布时间】:2021-04-22 16:03:52
【问题描述】:
我觉得有一种简单的方法可以做到这一点,我可能只是想念。但基本上,给定这样的接口:
interface Order {
type: string;
additionalDetails: { [detail: string]: any };
}
我想覆盖/继承这个基接口的类型,但是有没有办法让任何这样做的接口 Order 只具有这两个属性?
// valid
interface Burger extends Order {
type: 'cheeseburger';
additionalDetails: {
ketchup: boolean;
cheese: boolean;
mayo: boolean;
};
}
// invalid
interface Dessert extends Order {
type: 'icecream';
additionalDetails: {
cone?: boolean;
waffle?: boolean;
};
flavor: string;
}
// invalid
interface Fries extends Order {
type: 'fries';
}
// invalid
interface FriedChicken extends Order {
additionalDetails: boolean;
}
我不完全确定 extends 是否是正确的方法,但如果我执行FriedChicken 接口之类的操作,我发现它的实现至少会引发错误。我认为泛型可能与它有关,因为我想要任何泛型,例如它扩展或包含Order 的属性,但我不完全确定。
【问题讨论】:
-
这显然不是 Typescript 的用途。 Order 接口没用,
extends目的被滥用。你想用它实现什么? -
我想我很清楚我想要实现什么,并且我已经确定扩展不是实现我的想法的方法。总而言之,我想要一种“扩展”接口的方法,即重用它,但能够通过覆盖某些属性类型来更具体地定义它。在我的示例中,
Order有点像模板;任何有效的接口以及“扩展”和“覆盖”它必须具有且仅具有扩展现有类型的type和additionalDetail属性。
标签: typescript typescript-generics