我想强制对象的子级成为某个接口或从该接口扩展。
例如:
export interface Configuration {
pages: {
home: IHome;
about: IAbout; // I want IAbout will have to extends IPage
contact: IPage;
};
}
interface IPage {
displayName: string;
}
interface IHome extends IPage {
slider: any; // property that only Home has
}
interface IAbout { // How to force this interface to extends IPage like IHome interface
map: any; // property that only About has
}
我如何强制IAbout
到extends IPage
?
我知道方法[pageName: string]: IPage
,
但不会强制IPage
到extends IPage
。
有没有一种方法可以强制值继承自IPage
?
答案 0 :(得分:1)
我猜你的意思是每个嵌套对象都是给定的接口和IPage接口。
您可以将IPage与映射对象的交集与计算键一起使用。
type ChildrenWithIPage<T extends object> = {
[key in keyof T]: T[key] & IPage;
};
export interface Configuration {
pages: ChildrenWithIPage<{
home: IHome;
about: IAbout;
contact: IPage;
}>;
}
interface IPage {
displayName: string;
}
interface IHome {
slider: any;
}
interface IAbout {
map: any;
}
使用[key in keyof T]
将遍历T的所有键,T[key]
将返回属性key
中的值,而& IPage
将创建交集,其作用非常相似继承接口