打字稿:“无法find模块”有效打字

我刚刚开始使用打字机新的nodejs项目。 我安装了Typings( https://github.com/typings/typings ),并使用它来为节点v4.x安装参考文件,并且表示v4.x.

我的节点版本是v4.2.6我的打字版本是v1.7.5

我的项目目录是这样布置的:

package.json tsconfig.json typings.json src/ app.ts typings/ main.d.ts main/ambient/node/node.d.ts main/ambient/express/express.d.ts 

typings / main.d.ts的内容如下:

 /// <reference path="main/ambient/express/express.d.ts" /> /// <reference path="main/ambient/node/node.d.ts" /> 

tsconfig.json的内容如下:

 { "compilerOptions": { "target": "es6", "module": "commonjs" } } 

typings.json的内容如下:

 { "dependencies": {}, "devDependencies": {}, "ambientDependencies": { "express": "github:DefinitelyTyped/DefinitelyTyped/express/express.d.ts#dd4626a4e23ce8d6d175e0fe8244a99771c8c3f2", "node": "github:DefinitelyTyped/DefinitelyTyped/node/node.d.ts#1c56e368e17bb28ca57577250624ca5bd561aa81" } } 

src / app.ts的内容如下:

 'use strict'; ///<reference path="../typings/main.d.ts"/> import * as express from "express"; 

这是非常简单的,应该导致一个基本的应用程序。 但是,当我尝试编译这个时,我得到了错误error TS2307: Cannot find module 'express'.

我已经尝试重新排列打字文件,改变参考path标记中的相对path,使用tsconfig.json中的files字段来指示引用path,而不是在文件中使用内联标记,都无济于事。 我也尝试直接在命令行上使用gulp-typescriptgulp-tsctsc编译。

当我尝试使用nodejs内置模块(如cryptohttpfs等)时,出现类似的错误

这些参考资料似乎有效 – 我错过了什么?

三斜杠指令需要在文件中的任何语句之前。 您的"use strict"序言需要您的参考意见之后提出:

 ///<reference path="../typings/main.d.ts"/> 'use strict'; import * as express from "express"; 

作为你的评论的后续,你没有得到任何排除你的导入:这是因为TypeScript执行导入省略。 除非您使用模块的某些值,否则编译器将不会发出导入,因为它假定您只需要该模块的types。

Daniel的答案在技术上是正确的,但基于你的tsconfig main.d.ts仍然会被拾取,所以不会为你解决问题。

这就是说我确实发现了问题并发送了一个pull请求: https : //github.com/jereynolds/ts-test/pull/1


  • 你可能应该排除node_modulesnode_modules否则编译将包含重复的标识符(typings)/将会很慢(node_modules)

  • types安装serve-static (需要express )和mimeserve-static所需)。