Javascript 无法将自定义运算符添加到可观察类
我正在编写一个自定义操作符来加载csv文件并将每一行作为数据发出。这个操作符应该像操作符的Javascript 无法将自定义运算符添加到可观察类,javascript,rxjs5,Javascript,Rxjs5,我正在编写一个自定义操作符来加载csv文件并将每一行作为数据发出。这个操作符应该像操作符的一样工作,这是一个创建可观察对象的静态函数。我按照的指示,将操作符函数直接添加到可观察的原型中 以下所有代码都是用JavaScript ES6编写的。 我的源代码是 import { Observable } from 'rxjs'; import { createInterface } from 'readline'; import { createReadStream } from 'fs'; fun
一样工作,这是一个创建可观察对象的静态函数。我按照的指示,将操作符函数直接添加到可观察的原型中
以下所有代码都是用JavaScript ES6编写的。
我的源代码是
import { Observable } from 'rxjs';
import { createInterface } from 'readline';
import { createReadStream } from 'fs';
function fromCSV(path, options) {
return Observable.create((subscriber) => {
let readStream = createReadStream(path);
let reader = createInterface({ input: readStream });
let isHeader = true;
let columns;
reader.on('line', (line) => {
if (isHeader) {
columns = line.split(',');
isHeader = false;
} else {
let values = line.split(',');
let valueObject = {};
for (let i = 0, n = columns.length; i < n; i++) {
valueObject[columns[i]] = values[i] || undefined;
}
subscriber.next(valueObject);
}
});
reader.on('close', () => subscriber.complete());
readStream.on('error', (error) => subscriber.error(error));
});
}
Observable.prototype.fromCSV = fromCSV;
它抛出一个错误TypeError:_rxjs.Observable.fromCSV不是一个函数
。所以函数绑定失败了,我不知道为什么会发生:-(非常感谢您的帮助
这让我特别困惑,因为我已经成功地为做了类似的运算符绑定。问题是TypeScript不知道该运算符,因为它在RxJS的*.d.ts
中找不到它
看看默认RxJS操作符是如何完成的:
在这种情况下,您只需要declare模块…
部分,该部分具有指向可观察定义的正确路径。例如:
function fromCSV(path, options) {
...
}
Observable.prototype.fromCSV = fromCSV;
declare module 'rxjs/Observable' {
interface Observable<T> {
fromCSV: typeof fromCSV;
}
}
来自CSV的函数(路径、选项){
...
}
Observable.prototype.fromCSV=fromCSV;
声明模块“rxjs/Observable”{
可观测界面{
fromCSV:fromCSV的类型;
}
}
问题是TypeScript不知道操作符,因为它在RxJS的*.d.ts
中找不到它
看看默认RxJS操作符是如何完成的:
在这种情况下,您只需要declare模块…
部分,该部分具有指向可观察定义的正确路径。例如:
function fromCSV(path, options) {
...
}
Observable.prototype.fromCSV = fromCSV;
declare module 'rxjs/Observable' {
interface Observable<T> {
fromCSV: typeof fromCSV;
}
}
来自CSV的函数(路径、选项){
...
}
Observable.prototype.fromCSV=fromCSV;
声明模块“rxjs/Observable”{
可观测界面{
fromCSV:fromCSV的类型;
}
}
事实证明,我使用了错误的方法添加静态函数。有关更多信息,请参阅 要将静态函数添加到
Observable
类中,代码需要
Observable.fromCSV = fromCSV;
将函数添加到类的原型中只会使其在新建该类后可用。结果表明,我使用了错误的方法添加静态函数。有关更多信息,请参阅 要将静态函数添加到
Observable
类中,代码需要
Observable.fromCSV = fromCSV;
将函数添加到类的原型将使其仅在更新该类后可用