Typescript 键入此脚本作为参数

Typescript 键入此脚本作为参数,typescript,rxjs5,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 fun

当我浏览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));
}
export函数图(this:Observable,project:(值:T,索引:number)=>R,thisArg?:any):Observable{
if(项目类型!==‘功能’){
throw new TypeError('参数不是函数。是否正在查找'mapTo()`?');
}
返回此.lift(新的MapOperator(project,thisArg));
}
资料来源:

我想知道当传递名为this的参数时会发生什么。
它是否与任何其他参数一样处理,或者在执行此操作时是否键入一些特殊操作?

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

但是,可以使用
function.prototype.call
function.prototype.apply
调用
map
函数,并且可以将上下文传递到
call
apply

例如:

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

const source = of(1);
const mapped = map.call(source, value => value + 1);
在本例中,
将对应于
映射
实现中的
,并且其类型将为
可观察

有关更多信息,请参阅中的“
参数”部分