我有以下接口:
interface Example {
'/api/good/path': {
get: Record<string, unknown>;
parameters: Record<string, unknown>;
};
'/api/alsogood/path': {
get: Record<string, unknown>;
};
'/api/bad/path': {
post: Record<string, unknown>;
};
'/api/technicallygood/path': {
get: Record<string, unknown>;
post: Record<string, unknown>;
};
}
是否可以从Example
创建一个新接口,但删除所有不包含get
属性的嵌套对象?
我的目标是最终得到这样的东西:
interface Example {
'/api/good/path': {
get: Record<string, unknown>;
parameters: Record<string, unknown>;
};
'/api/alsogood/path': {
get: Record<string, unknown>;
};
'/api/technicallygood/path': {
get: Record<string, unknown>;
post: Record<string, unknown>;
};
}
换句话说,由于Example['/api/bad/path']
不包含get
,因此将其删除。Example
的所有其他键都保留,因为它们至少包含一个名为get
的属性。
1条答案
按热度按时间toiithl61#
这可以通过使用mapped types和键重Map来实现。
说明:
我们通过键进行Map,如果属性具有'get'属性,我们使用
K
作为键,否则,never
将删除此属性,因为never
不能用作键,并且被视为空并集。Playground