将 this 作为参数打字稿
typescript this as parameter
当我浏览 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
的参数时到底发生了什么。
它只是像任何其他参数一样对待,还是在您执行此操作时打字稿会执行一些特殊操作?
您不能直接传递 map
与签名中的 this
参数相对应的参数。 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);
在此示例中,source
将对应于 map
的实现中的 this
,并且其类型为 Observable<number>
.
有关详细信息,请参阅 documentation 中的“this
参数”部分。
当我浏览 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
的参数时到底发生了什么。
它只是像任何其他参数一样对待,还是在您执行此操作时打字稿会执行一些特殊操作?
您不能直接传递 map
与签名中的 this
参数相对应的参数。 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);
在此示例中,source
将对应于 map
的实现中的 this
,并且其类型为 Observable<number>
.
有关详细信息,请参阅 documentation 中的“this
参数”部分。