Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何有不同的基于输入对象的返回类型?

如何有不同的基于输入对象的返回类型?
EN

Stack Overflow用户
提问于 2020-03-09 03:42:56
回答 1查看 33关注 0票数 1

我有一种基于某些文件过滤列表的方法,有时我可以有一个额外的pageNumber和限制来过滤我的列表,并且只获得有限数量的条目。

这就是我在代码中的内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public getByFilter(
   fitler?: { [P in keyof T]?: T[P] } & { pageNumber?: number; limit?: number }
 ): Observable<IPagedResult<T>> { // code to filter }

用这种方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.getByFilter({ ...filters })
      .subscribe((response: IPagedResult<MyClass>) => {
        // do something
      });

我的方法是否有一个返回类型

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Observable<T[]>

如果我的筛选器对象不包含pageNumber和限制?

然后用它像

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.getByFilter({ ...filters })
      .subscribe((response: MyClass[]) => {
        // do something
      });
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-09 06:40:11

目前只有在实现端进行一些恶意转换才能做到这一点,但是问题正在被跟踪(#24929#22735#22596),并且维护人员将其声明为设计吊装

解决方案是将filter参数定义为泛型参数,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type BasicFilter<T> = { [P in keyof T]?: T[P] };
type PaginationFilter<T> = BasicFilter<T> & { pageNumber: number, limit: number };
type Filter<T> = BasicFilter<T> | PaginationFilter<T>;

public getByFilter<F extends Filter<T>>(filter: F): F extends PaginationFilter<T> ? Observable<IPagedResult<T>> : Observable<T> {
    /**/
}

将根据输入是分页筛选器还是基本筛选器来推断返回类型。

这在呼叫端的工作方式与预期一样:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const paged = new Observable<Test>({foo: 1, bar: ''}).getByFilter({
   pageNumber: 2,
   limit: 2,
});
// paged as type: Observable<IPagedResult<Test>>

const raw = new Observable<Test>({foo: 1, bar: ''}).getByFilter({});
// raw as type: Observable<Test>

在实现方面,您需要这样的断言as any (在GitHub上正在跟踪的问题):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if ('pageNumber' in filter && 'limit' in filter) {
  return new Observable<IPagedResult<T>>({
     data: this.value,
  }) as any;
}
return this as any;

一个完整的例子可以找到在这个操场上

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60599881

复制
相关文章
1619. 删除某些元素后的数组均值
给你一个整数数组 arr ,请你删除最小 5% 的数字和最大 5% 的数字后,剩余数字的平均值。
Michel_Rolle
2021/02/26
2.5K0
LeetCode 1619. 删除某些元素后的数组均值
给你一个整数数组 arr ,请你删除最小 5% 的数字和最大 5% 的数字后,剩余数字的平均值。
Michael阿明
2021/02/19
6210
python删除列表元素
remove 删除单个元素,删除首个符合条件的元素,按值删除,返回值为空 List_remove = [1, 2, 2, 2, 3, 4] print(List_remove.remove(2)) print("after remove", List_remove) # None # after remove [1, 2, 2, 3, 4] ---- pop 删除索引位置元素,无参情况下删除最后一个元素,返回删除的元素值 List_pop = [1, 2, 2, 2, 3, 4] print(List
演化计算与人工智能
2020/08/14
1.6K0
python中删除列表中重复元素
在面试中,很可能遇到给定一个含有重复元素的列表,删除其中重复的元素,下边给出三种方法来实现这个功能。
全栈程序员站长
2022/09/07
4.1K0
java列表删除指定位置元素_怎么删除数组中的某个元素
1. 因为数组长度在初始化的时候是指定的并且不可变的,所以不能在原有的数组上直接进行删除操作,需要新建一个长度为当前长度减1的数组
全栈程序员站长
2022/09/22
5.4K0
图解LeetCode——1619. 删除某些元素后的数组均值(程度:简单)
给你一个整数数组 arr ,请你删除最小 5% 的数字和最大 5% 的数字后,剩余数字的平均值。
爪哇缪斯
2023/05/10
1610
图解LeetCode——1619. 删除某些元素后的数组均值(程度:简单)
再谈谈列表元素的删除
之前(以及更早之前)都提到了列表元素的删除,也提到过几种方法,有兴趣的朋友可以去看看,其中一种个人比较倾向的写法大概是这个样子(C++):
用户2615200
2018/08/02
1.8K0
再谈谈列表元素的删除
Swift 日历添加事件 删除事件
import EventKit /** Privacy - Calendars Usage Description 添加日历权限 info.list 配置权限 */ /// 日历添加事件 class KKAddEventClasse: NSObject { /// 添加成功回调 typealias SuccessAddEvent = ((_ identifier: String) -> Void) /// 添加失败回调 typealias ErrorAddEvent =
菜菜不吃蔡
2021/03/20
4.1K1
js数组添加删除数据_如何删除数组中的元素
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/10
14.4K0
js数组添加删除数据_如何删除数组中的元素
numpy入门-数组中添加和删除元素
**numpy.insert(arr,obj,value,axis=None) **
皮大大
2021/03/02
6.3K0
如何从 Python 列表中删除所有出现的元素?
在 Python 中,列表是一种非常常见且强大的数据类型。但有时候,我们需要从一个列表中删除特定元素,尤其是当这个元素出现多次时。本文将介绍如何使用简单而又有效的方法,从 Python 列表中删除所有出现的元素。
网络技术联盟站
2023/06/01
12.3K0
python:删除列表中特定元素的几种方法
终于刷到一条不看答案就能轻松解出来的题目,更重要的是学习到了几种删除列表中元素的方法,值得做一下笔记
冰霜
2022/03/19
8.4K0
python:删除列表中特定元素的几种方法
删除链表中的元素
题意 删除链表中等于给定值 val 的所有节点。 样例 给出链表 1->2->3->3->4->5->3, 和 val = 3, 你需要返回删除3之后的链表:1->2->4->5。 思路 只需要将一个指针,遍历链表,当链表中有元素与 val 值相同时,让当前节点的 next 节点直接指向 当前节点的 next.next 节点即可。 代码实现 /** * Definition for singly-linked list. * public class ListNode { * int val;
一份执着✘
2018/06/04
2.2K0
java数组删除元素_java中删除 数组中的指定元素方法[通俗易懂]
java中删除 数组中的指定元素要如何来实现呢,如果各位对于这个算法不是很清楚可以和小编一起来看一篇关于java中删除 数组中的指定元素的例子。
全栈程序员站长
2022/09/22
8.3K0
lua中删除元素
lua中删除元素常用办法就是t[k]=nil;table库还提供一个接口:table.remove();
用户4766018
2022/08/19
1.7K0
Python 数组和列表:创建、访问、添加和删除数组元素
本页将向您展示如何使用列表作为数组,但要在 Python 中使用数组,您需要导入一个库,比如 NumPy 库。数组用于在一个变量中存储多个值:
小万哥
2023/10/23
1.4K0
Python 数组和列表:创建、访问、添加和删除数组元素
遍历ArrayList,并删除某些元素的方法实现「建议收藏」
本文是根据 https://blog.csdn.net/qq_32575047/article/details/78902254 的帖子进行整理的,在此感谢一下。
全栈程序员站长
2022/11/14
4380
Python 中删除列表元素的三种方法
列表基本上是 Python 中最常用的数据结构之一了,并且删除操作也是经常使用的。
AlwaysBeta
2022/04/20
2.5K0
jQuery实现动态添加和删除(点击按钮添加在页面添加和删除元素)
1:点击添加按钮弹出弹框,form表单可以填写相关的信息 2:点击保存按钮,相关信息会显示在界面的列表里
王小婷
2019/02/26
7.3K0
点击加载更多

相似问题

添加后如何删除事件侦听器

22

仅在移动设备上被"removeEventListener“删除后,无法添加事件侦听器

10

删除元素中的事件侦听器

12

添加/删除事件侦听器-

119

在删除元素之前是否需要删除事件侦听器?

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文