打字作为参数

时间:2017-08-13 06:50:43

标签: typescript rxjs5

当我查看rxjs库时,我偶然发现了这个函数:

export function map<T, R>(this: Observable<T>, project: (value: T, index: number) => R, thisArg?: any): Observable<R> {
   if (typeof project !== 'function') {
     throw new TypeError('argument is not a function. Are you looking for `mapTo()`?');
   }
   return this.lift(new MapOperator(project, thisArg));
}

来源:https://github.com/ReactiveX/rxjs/blob/master/src/operator/map.ts

我想知道在传递名为this的参数时会发生什么。 它只是像其他任何参数一样对待,或者当你这样做时打字打字吗?

1 个答案:

答案 0 :(得分:4)

您无法直接传递map与签名中this参数对应的参数。 TypeScript使用this参数来指示上下文的类型,并且在运行时没有相应的参数。

但是,可以使用mapFunction.prototype.call来调用Function.prototype.apply函数,并且可以将上下文传递给callapply

例如:

import { of } from "rxjs/observable/of";
import { map } from "rxjs/operator/map";

const source = of(1);
const mapped = map.call(source, value => value + 1);

在此示例中,sourcethis的实施中的map相对应,其类型为Observable<number>

有关详细信息,请参阅&#34; this参数&#34; documentation中的部分。