2017-08-13 112 views
3

當我一直在尋找通過我碰到這個功能跌跌撞撞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參數時到底發生了什麼。 它只是像對待任何其他參數一樣對待,或者當你這樣做時打印一些特別的動作?

回答

3

您不能直接傳遞map參數,該參數對應於簽名中的參數this。 TypeScript使用this參數指示上下文的類型,並且在運行時沒有相應的參數。

然而,map功能可使用Function.prototype.callFunction.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); 

在這個例子中,source將對應於在thismap實施,它將有類型Observable<number>

有關詳細信息,請參閱documentation中的「this參數」一節。