给定如下接口
interface paths {
"/api/user/{id}": {
get: operations["getUserGET"];
};
"/api/user/add": {
put: operations["addUsingPUT"];
};
...
}
我如何通过http方法(get、put、post等)创建子类型过滤?
其结果可能类似于:
type getPaths = AwesomeFilter<paths, 'get'>
/* equivalent to: */
interface getPaths {
"/api/user/{id}": {
get: operations["getUserGET"];
};
/* only gets on the interface */
}
3条答案
按热度按时间v8wbuo2f1#
可以使用下面的自定义类型根据嵌套属性上存在的方法进行筛选。
您可以这样使用它:
eyh26e7m2#
如果我正确理解了这个问题,您可以使用“Pick”工具类型来执行此操作:
type getPaths = Pick<paths, 'get'>;
也就是说,在您的示例中,您似乎混淆了类型定义和对象常量,因此这并不十分清楚。
还请注意,TypeScript约定建议类型名称以大写字母开头-例如
Paths
、GetPaths
等。cwxwcias3#
您可以使用PickyByType实用程序类型。说明如下:https://stackoverflow.com/a/69756175
对于
'get'
,则为PickByType<T, {get: unknown}>
AwesomeFilter
现在可以挑选具有给定属性的所有类型。