如何使用npm包

时间:2017-07-21 10:07:41

标签: typescript

我为"声明合并"

进行简单测试 它很简单 将hello方法添加到rxjs.Ovservable

import '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>'.'

请帮忙。

1 个答案:

答案 0 :(得分:0)

你的包的package.json应该指向包含其中类型的文件,例如:

"typings": "src/index.ts",

(但最好指向index.d.ts。见下文。)

其他一些事情。你应该把ts文件编译成一个js文件,package.json也应该指向它。 E.g:

"main": "dist/output-file.js",
  1. 让编译器输出index.d.ts文件并指向package.json中的文件。例如。如果使用tsc,则将--declaration选项添加到命令行。

    "typings": "index.d.ts",
    
  2. 您的'声明合并'项目需要引用'hello-observable'项目。例如。运行:

    npm install --save https://github.com/m0a/hello-observable
    
  3. 您应该从package.json中删除'npm link hello-observable'。如果要使用hello-observable的本地副本,则从hello-observable目录运行'npm link',从声明合并目录运行'npm link hello-observable'。这些命令只需运行一次就不应该提交。

  4. 使用import'hello-observable“,而不是导入'./hello-observable'。