2017-08-13 4 views
3

Als ich durch die rxjs Bibliothek Suche ich auf diese Funktion gestolpert:Typoskript dies als Parameter

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)); 
} 

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

Ich frage mich, was wirklich passiert, wenn ein Argument this namens vorbei. Wird es nur wie jeder andere Parameter behandelt oder gibt es spezielle Aktionen ein, wenn Sie dies tun?

Antwort

3

Sie können map nicht direkt ein Argument übergeben, das dem Parameter this in der Signatur entspricht. Der Parameter this wird von TypeScript verwendet, um den Typ für den Kontext anzugeben, und zur Laufzeit gibt es kein entsprechendes Argument.

jedoch die map Funktion kann mit Function.prototype.call oder Function.prototype.apply genannt werden, und der Kontext kann call oder apply weitergegeben werden.

Zum Beispiel:

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

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

In diesem Beispiel source entspräche this bei der Umsetzung von map, und es würde den Typen Observable<number> hat. Weitere Informationen finden Sie im Abschnitt "this Parameter" in der documentation.

Verwandte Themen