我为"声明合并"
进行简单测试 它很简单 将hello方法添加到rxjs.Ovservableimport 'rxjs';
import { Observable } from 'rxjs/Observable';
export function hello <T>(this: Observable<T> ): Observable<T> {
console.log('hello');
return this;
}
Observable.prototype.hello = hello;
declare module 'rxjs/Observable' {
// tslint:disable-next-line:no-shadowed-variable
interface Observable<T> {
hello: typeof hello;
}
}
describe('main test', () => {
it('test 01', () => {
Observable.of(1, 2, 3, 4, 5)
.hello()
.map(x => x)
.subscribe(x => (console.log(x)));
});
});
它的工作原理(使用测试框架(jest
))
所以,我尝试制作npm包
https://github.com/m0a/hello-observable
但是,发生了错误。
import { Observable } from 'rxjs/Observable';
import 'rxjs';
import 'hello-observable'; // my local npm package
describe('main test', () => {
it('test 01', () => {
Observable.of(1, 2, 3, 4, 5)
.hello() // error is here
.map(x => x)
.subscribe(x => (console.log(x)));
});
});
// error message: 'Property 'hello' does not exist on type 'Observable<number>'.'
请帮忙。
答案 0 :(得分:0)
你的包的package.json应该指向包含其中类型的文件,例如:
"typings": "src/index.ts",
(但最好指向index.d.ts。见下文。)
其他一些事情。你应该把ts文件编译成一个js文件,package.json也应该指向它。 E.g:
"main": "dist/output-file.js",
让编译器输出index.d.ts文件并指向package.json中的文件。例如。如果使用tsc,则将--declaration选项添加到命令行。
"typings": "index.d.ts",
您的'声明合并'项目需要引用'hello-observable'项目。例如。运行:
npm install --save https://github.com/m0a/hello-observable
您应该从package.json中删除'npm link hello-observable'。如果要使用hello-observable的本地副本,则从hello-observable目录运行'npm link',从声明合并目录运行'npm link hello-observable'。这些命令只需运行一次就不应该提交。
使用import'hello-observable“,而不是导入'./hello-observable'。