打字稿:具有有效打字的“找不到模块”

新手上路,请多包涵

我刚刚使用 typescript 开始了一个新的 nodejs 项目。我安装了 Typings ( https://github.com/typings/typings ) 并用它来安装节点 v4.x 和 express 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'.

我尝试重新排列类型文件,更改引用路径标签中的相对路径,使用 tsconfig.json 中的 files 字段来指示引用路径,而不是在文件中使用内联标签,一切都无济于事.我还尝试直接在命令行上使用 gulp-typescriptgulp-tsctsc 进行编译。

当我尝试使用 cryptohttpfs 等 nodejs 内置模块时,我遇到了类似的错误。

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

原文由 aaaarrgh 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 274
2 个回答

三斜杠指令需要在文件中的任何语句之前。您的 "use strict" 序言需要 您的参考评论之后出现,如下所示:

 ///<reference path="../typings/main.d.ts"/>

'use strict';

import * as express from "express";

作为对您的评论的跟进,您没有为您的导入获得任何发射:那是因为 TypeScript 执行导入省略。除非您将模块用于某个值,否则编译器不会发出导入,因为它假定您只需要该模块的类型。

原文由 Daniel Rosenwasser 发布,翻译遵循 CC BY-SA 3.0 许可协议

Daniel 的回答在技术上是正确的,但基于您的 tsconfig main.d.ts 仍然会被选中,因此不会为您解决问题。

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


  • 您可能应该排除 typingsnode_modules 否则编译将包含重复的标识符(类型)/会很慢(node_modules)

  • typings install serve-static (needed for express ) and mime (needed for serve-static ).

原文由 basarat 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏