打字稿:"找不到模块"有效的打字

时间:2016-02-01 02:37:27

标签: node.js express typescript typescript1.7

我刚刚使用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字段指示引用路径,而不是在文件中使用内联标记,全部为no无济于事。我还尝试直接在命令行上使用gulp-typescriptgulp-tsctsc进行编译。

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

这些引用似乎有效 - 我错过了什么?

4 个答案:

答案 0 :(得分:19)

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

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

'use strict';

import * as express from "express";

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

答案 1 :(得分:2)

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

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

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

  • 输入安装serve-staticexpress所需)和mimeserve-static所需)。

答案 2 :(得分:1)

我知道这是一个老问题,很抱歉碰到它,但它是谷歌的第一个链接之一。

由于上述问题并没有解决我的问题,我最终解决了这个问题,我以为我会分享......在我的情况下,导致问题的是相对路径。

我的打字在

typings/bootstraptypings/react-domtypings/react, 等。

react-dom个人有一个import from 'react'。要修复我的代码,我必须将其编辑为'../react/react'。简单!

答案 3 :(得分:1)

以上都不对我有用-所以我希望这会对其他人有所帮助。 (我正在使用VS Code)。

这个问题突然以我的一项服务突然发生在我身上,这在几个模块中都有提及。保存一个完全不相关的组件,该组件不使用该服务后,使用该服务的两个组件报告了“找不到模块”错误。我可以通过简单地将声明更改为无效文件夹,保存文件然后将其更改回正确的路径来修复它。