2015-11-02 92 views
0

今天早上我有一个问题让我疯狂。我会解释这个问题,然后我会在下面提供我的答案(以便其他遇到此问题的人可以更快地找到解决方案)。在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" 
    ] 
} 

如果我试图通过简单的编译此在src内运行tsc(版本1.6.2)命令,我得到:

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

我在这里发现莫名其妙的是我已经安装reacttsd绑定,但是当我运行tsc时,出现此错误。看起来我已经做得很好,为什么错误?

回答

0

所以我最终想通了,是我需要明确列入typings文件在我的"files"名单,即

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

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

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