此TypeScript函数参数如何工作

时间:2019-04-24 03:15:26

标签: typescript

我在网上找到了此代码,并试图理解它。

public searchFunctionFactory($index: any): (text: Observable<string>) => Observable<any[]> {


    //Create a function that considers the specified $index parameter value
    let getCities = (text$: Observable<string>) => 
        text$
            .debounceTime(300)
            .distinctUntilChanged()
            .switchMap( query => {

                //some logic involving $index here
                //...

                //query.length < 2 ? [] : this.apiService.getCities(query).catch(() => {
                //return Observable.of([]);
            });

    //Return that "custom" function, which will in turn be called by the ngbTypescript component
    return getCities;
}

我的问题与方法签名有关。

public searchFunctionFactory($index: any): (text: Observable<string>) => Observable<any[]>

我了解

$index: any是Any类型的输入参数。

该函数返回Observable和任何observable。

但是什么是 : (text: Observable<string>)

是第二个参数吗?

如果第二个参数不应该

public searchFunctionFactory($index: any ,text: Observable<string>) => Observable<any[]> 

1 个答案:

答案 0 :(得分:1)

这表示searchFunctionFactory函数的返回值是一个采用参数text(类型为Observable<string>)并调用 that 的函数。函数返回Observable<any[]>。这是一个高阶函数。

public searchFunctionFactory($index: any): (text: Observable<string>) => Observable<any[]> {
                        /*   ^^^^^^^^^^^   searchFunctionFactory parameter */
public searchFunctionFactory($index: any): (text: Observable<string>) => Observable<any[]> {
  /* searchFunctionFactory return value     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ */

如注释所述,这不是Javascript语法,而是Typescript语法。

所以,如果您致电

const result = searchFunctionFactory(someVar);

result将是

(text: Observable<string>) => Observable<any[]>

然后您可以用

进行调用
const resultTwo = result(someOtherVar)

获取类型为Observable<any[]>的值。