Javascript 使用带有TypeScript-can';我甚至连最简单的例子都做不到

Javascript 使用带有TypeScript-can';我甚至连最简单的例子都做不到,javascript,node.js,npm,typescript,Javascript,Node.js,Npm,Typescript,我想在Typescript程序中使用npm模块。幸运的是,我遇到了一个看起来很容易而且确实有效的方法。我想我会尝试添加另一个包,只是为了掌握窍门。所以我就做了 以下是我在提交过程中所做的所有事情: 将pubsub-js添加到我在package.json中的依赖项中,因此它将安装在npm install上 设置tsd,使用它安装pubsub js的类型脚本定义,并将其设置为在npm install上自动运行 修改了index.ts以包含已安装的定义: /// <reference path=

我想在Typescript程序中使用npm模块。幸运的是,我遇到了一个看起来很容易而且确实有效的方法。我想我会尝试添加另一个包,只是为了掌握窍门。所以我就做了

以下是我在提交过程中所做的所有事情:

  • pubsub-js
    添加到我在
    package.json
    中的依赖项中,因此它将安装在
    npm install

  • 设置
    tsd
    ,使用它安装
    pubsub js
    的类型脚本定义,并将其设置为在
    npm install
    上自动运行

  • 修改了
    index.ts
    以包含已安装的定义:

    /// <reference path="./typings/pubsubjs/pubsub.d.ts" />
    
  • 不幸的是,这不起作用。我得到这个错误:

    $ npm install
    $ npm test
    > demo-typescript-node-minimal@0.0.1 test /home/dumbmatter/projects/mini/demo-typescript-node-minimal
    > tsc index.ts --module commonjs && node ./index
    
    index.ts(10,25): error TS2307: Cannot find module 'pubsub-js'.
    npm ERR! Test failed.  See above for more details.
    
    (如果您想自己安装,请运行
    npm安装
    ,然后运行
    npm测试

    我想重申,原始版本(没有我的提交,直接从)实际上是有效的:

    $ git checkout d002c0dffc9d9f65aca465b0fc6a279bcd23202d
    $ npm test
    
    > demo-typescript-node-minimal@0.0.1 test /home/dumbmatter/projects/mini/demo-typescript-node-minimal
    > tsc index.ts --module commonjs; node ./index
    
    [ 'abc', index: 0, input: 'abcdefgh' ]
    Hello Dave
    
    那么是什么原因呢?为什么我的尝试失败得这么惨


    我也将感谢任何关于在TypeScript中使用npm包的建议。它只是为了实际使用而容易出错吗?如果是这样的话,那么您发现自己正处于这样一种情况:在您正在使用的TypeScript程序中需要一些通用的pubsub库。。。你会怎么做?编写您自己的?

    问题在于
    pubsub.d.ts
    不包含CommonJS模块
    “pubsub js”
    的定义(而是只定义一个全局对象
    pubsubs

    最好的解决办法是编辑该文件;在底部添加:

    declare module "pubsub-js" {
      export = PubSub;
    }
    

    当CommonJS或AMD模块可用于给定的包时,大多数.d.ts文件已经包含这样的定义。

    问题是
    pubsub.d.ts
    不包含CommonJS模块的定义
    “pubsub js”
    (相反,它只定义一个全局对象
    pubsubs

    最好的解决办法是编辑该文件;在底部添加:

    declare module "pubsub-js" {
      export = PubSub;
    }
    

    当CommonJS或AMD模块可用于给定的包时,大多数.d.ts文件已经包含这样的定义。

    该死,你回答得太快了,堆栈溢出还不让我接受!该死,你回答得太快了,堆栈溢出还不让我接受!