这个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)