这个TypeScript函数参数是如何工作的

这个TypeScript函数参数是如何工作的,typescript,Typescript,我在网上找到了这段代码,并试图理解它 public searchFunctionFactory($index: any): (text: Observable<string>) => Observable<any[]> { //Create a function that considers the specified $index parameter value let getCities = (text$: Observable<str

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

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;
}

这表明
searchFunctionFactory
函数的返回值是一个函数,该函数采用
text
参数,其类型为
Observable
,调用该函数返回一个
Observable
。这是一个高阶函数

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

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

要获取类型为可观察的值,实际上是返回函数的函数,它是类型脚本代码,而不是JavaScript。非常感谢您的解释。我可以这样称呼它吗?const result=searchFunctionFactory(someVar)(someOtherVar)()不要这样认为。您可以执行
searchFunctionFactory(someVar)(someOtherVar)
,从而立即调用返回的函数,但是返回的函数也不返回函数(它返回一个可观察的),因此您不能调用它
const ObservableFany=searchFunctionFactory(someVar)(someOtherVar)
Hi再次感谢,因此它将位于const ObservableFany=searchFunctionFactory(someVar)的行上,然后是通常的例程ObservableFany.subscribe(()=>做点什么)?
searchFunctionFactory
返回的是函数,不是可观察的-您必须调用返回的函数来获取任何对象的可观察性
searchFunctionFactory(someVar)(someOtherVar)
,然后您可以调用
.subscribe
或任何您想要的可观察对象
public searchFunctionFactory($index: any): (text: Observable<string>) => Observable<any[]> {
                        /*   ^^^^^^^^^^^   searchFunctionFactory parameter */
public searchFunctionFactory($index: any): (text: Observable<string>) => Observable<any[]> {
  /* searchFunctionFactory return value     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ */
const result = searchFunctionFactory(someVar);
(text: Observable<string>) => Observable<any[]>
const resultTwo = result(someOtherVar)