【问题标题】:RxJS typescript understanding the generic typesRxJS typescript 理解泛型类型
【发布时间】:2018-11-01 01:19:04
【问题描述】:

从 RxJS 文档中,我们可以了解到我们可以使用以下代码创建自定义运算符:

const takeEveryNthSimple = (n: number) => <T>(source: Observable<T>) =>
  source.pipe(filter((value, index) => index % n === 0 ))

我想了解在这种情况下&lt;T&gt;(source: Observable&lt;T&gt;) 的泛型类型是什么。

请帮忙。

【问题讨论】:

    标签: typescript rxjs


    【解决方案1】:

    将泛型类型视为使相同函数能够返回任何传递的类型的方法。

    例如,执行get 请求的函数。

    function doGet<T>(endpoint: string): Observable<T> {
      return Observable.of(fetch(endpoint));
    }
    

    这个函数将返回一个 T 类型的 observable;

    现在,假设您有一个 REST api,您可以获取 Posts、Users、Tags。您可以将此函数与类型定义一起使用

    interface Posts {
      //...
    }
    
    interface Users {
      //...
    }
    
    interface Tags {
      //...
    }
    
    doGet<Posts>('/api/posts') => Observable<Posts>;
    doGet<Users>('/api/users') => Observable<Users>;
    doGet<Tags>('/api/tags') => Observable<Tags>;
    

    在您提供的示例中,传递给嵌套函数的Observable 将是泛型类型中定义的T 类型。

    希望这很清楚并回答了您的问题。

    【讨论】:

    • 在示例中提供github.com/ReactiveX/rxjs/blob/master/doc/…,我看不到他们提供的T类型像你一样,那么类型是什么?
    • T 只是泛型类型的名称。把它想象成一个未声明的变量,一旦你使用函数并给它一个类型签名,这个签名将在函数使用&lt;T&gt;的任何地方使用。人们通常使用 T 作为类型的参考,但您可以使用任何您喜欢的字母。
    猜你喜欢
    • 2019-05-30
    • 2020-08-14
    • 2018-07-20
    • 2019-09-17
    • 2020-01-05
    • 2021-01-03
    • 1970-01-01
    • 2022-12-03
    • 2021-12-06
    相关资源
    最近更新 更多