Я тестирую использование Rxjs 6.3.3 в тесте Jasmine в приложении Angular 7.2.Я пытаюсь создать Rxjs Observable, но у меня возникают ошибки, которые я не понимаю.
Сигнатура функции конструктора Rxjs Observable -
constructor(subscribe?: (this: Observable<T>, subscriber: Subscriber<T>) => TeardownLogic);
В тесте ЖасминаЯ пытаюсь создать экземпляр Observable, для этого мне нужно передать определение лямбда-выражения в сигнатуре конструктора.Следующий синтаксис:
const obs = new Observable<number>((this: Observable<number>, s: Subscriber<number>): TeardownLogic => {});
... терпит неудачу с
"error TS2730: An arrow function cannot have a 'this' parameter."
Что я не понимаю, потому что в сигнатуре функции конструктора определение функции стрелки объявлено с 'this'аргумент, не будучи проблемой.
Этот второй синтаксис:
const obs = new Observable((o: Observable<{}>, s: Subscriber<{}>): TeardownLogic => {});
... завершается неудачно с
"error TS2345: Argument of type '(o: Observable<number>, s: Subscriber<number>) => TeardownLogic' is not assignable to parameter of type '(this: Observable<number>, subscriber: Subscriber<number>) => TeardownLogic'"
Что я нахожу запутанным, поскольку две сигнатуры функций в сообщении об ошибке кажутся мне идентичными.
Что работает, хотя просто опускает первый аргумент, например, так:
const obs = new Observable((s: Subscriber<{}>): TeardownLogic => {});
Что смущает меня, потому что теперь определенная здесь лямбда не похожа на ту, что в сигнатуре конструктора.
Я знаю об использовании «this» в конструкторе, а также о замыкании и различном значении «this» в функции со стрелкой.Но я не знаю какого-либо специального значения «this», когда оно используется в качестве аргумента в сигнатуре метода.Я погуглил и прочитал документацию по «этому» в MDN, но все еще не стал мудрее.
В конструкторе Observable «это» в «подписке»: (this: Observable, subscriber: Subscriber) => TeardownLogic 'похоже на магическое поведение.Может кто-нибудь объяснить мне, что это такое и где я могу найти документацию по этому вопросу, пожалуйста?