在TypeScript中导入节点模块时出错

时间:2015-11-02 12:15:42

标签: node.js typescript

今天早上我遇到了一个让我发疯的问题。我将解释这个问题,然后我将在下面提供我的答案(以便其他遇到此问题的人可以尽快找到解决方案。)

只需发出以下命令即可轻松复制问题:

tsd query react --action install
mkdir src
echo "import React = require('react');" > src/foo.ts

我还在tsconfig.json中添加了以下src文件:

{
    "version": "1.6.2",
    "compilerOptions": {
        "outDir": "./tsdir",
        "target": "es5",
        "module": "commonjs",
        "moduleResolution": "node",
        "isolatedModules": false,
        "jsx": "react",
        "experimentalDecorators": true,
        "emitDecoratorMetadata": true,
        "declaration": true,
        "noImplicitAny": false,
        "removeComments": true,
        "noLib": false,
        "preserveConstEnums": true,
        "suppressImplicitAnyIndexErrors": true
    },
    "files": [
        "foo.ts"
    ]
}

如果我尝试通过在tsc内运行src(版本1.6.2)命令来编译它,我得到:

foo.ts(1,24): error TS2307: Cannot find module 'react'.

我觉得令人费解的是,我已经使用react安装了tsd绑定,但是当我运行tsc时,我收到此错误。看起来我已经做好了一切,为什么会出错?

1 个答案:

答案 0 :(得分:0)

所以我最终想到的是我需要在typings列表中明确包含"files"文件,即

{
    "version": "1.6.2",
    "compilerOptions": {
       ...
    },
    "files": [
        "foo.ts",
        "../typings/react/react.d.ts"
    ]
}

换句话说,我必须在typings中明确地包含"files"个文件。我真的不知道为什么。我认为tsc足够聪明,可以自己寻找它们。

如果有一个更好的解决方案,不必在.d.ts中明确列出所有"files"文件,我全都是。但我只想指出这至少是一种解决方法。